From 1dd473ca546ece333cd242cbfdf6f3f9578a1bbd Mon Sep 17 00:00:00 2001 From: Jacob Daniel Bennett Date: Mon, 2 Nov 2020 12:25:17 -0500 Subject: [PATCH 001/129] Implementation of headers only by passing a boolean to the Item class to include all or part of the item --- api/ECNQueue.py | 23 +++++++++++++++++------ api/api.py | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 6d73768..f6f0ffc 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -51,7 +51,7 @@ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") - +#queueDirectory = "/home/pier/e/benne238/personalQueues" # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -106,7 +106,7 @@ class Item: jsonData: A JSON serializable representation of the Item. """ - def __init__(self, queue: str, number: int) -> None: + def __init__(self, queue: str, number: int, wholeItem: bool) -> None: self.queue = queue try: self.number = int(number) @@ -118,7 +118,10 @@ def __init__(self, queue: str, number: int) -> None: self.lastUpdated = self.__getLastUpdated() self.__rawItem = self.__getRawItem() self.headers = self.__parseHeaders() - self.content = self.__parseSections() + + if wholeItem: + self.content = self.__parseSections() + self.isLocked = self.__isLocked() self.userEmail = self.__parseFromData(data="userEmail") self.userName = self.__parseFromData(data="userName") @@ -138,7 +141,7 @@ def __init__(self, queue: str, number: int) -> None: "number": self.number, "lastUpdated": self.lastUpdated, "headers": self.headers, - "content": self.content, + #"content": self.content, "isLocked": self.isLocked, "userEmail": self.userEmail, "userName": self.userName, @@ -151,6 +154,8 @@ def __init__(self, queue: str, number: int) -> None: "building": self.building, "dateReceived": self.dateReceived } + if wholeItem: + self.jsonData["content"] = self.content def __getLastUpdated(self) -> str: """Returns last modified time of item reported by the filesystem in mm-dd-yy hh:mm am/pm format. @@ -1247,7 +1252,7 @@ def __getItems(self) -> list: isFile = True if os.path.isfile(itemPath) else False if isFile and isValidItemName(item): - items.append(Item(self.name, item)) + items.append(Item(self.name, item, False)) return items @@ -1331,4 +1336,10 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues \ No newline at end of file + return queues +if __name__ == "__main__": + queueList = [] + validQueues = getValidQueues() + for queue in validQueues: + queueList.append(Queue(queue).toJson()) + print() \ No newline at end of file diff --git a/api/api.py b/api/api.py index f77e7fc..a4973fd 100644 --- a/api/api.py +++ b/api/api.py @@ -40,7 +40,7 @@ def get(self, queue: str, number: int) -> str: Returns: str: JSON representation of the item requested. """ - return ECNQueue.Item(queue, number).toJson() + return ECNQueue.Item(queue, number, True).toJson() class Queue(Resource): def get(self, queue: str) -> str: From afaaf81e9563e98144565489c3728786e8dd327f Mon Sep 17 00:00:00 2001 From: Jacob Daniel Bennett Date: Tue, 3 Nov 2020 10:58:41 -0500 Subject: [PATCH 002/129] update documentation for header-only and more efficient jsondata definition --- api/ECNQueue.py | 65 ++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index f6f0ffc..904e7f0 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -83,16 +83,16 @@ def isValidItemName(name: str) -> bool: # Classes #------------------------------------------------------------------------------# class Item: - """A single issue. + """A single whole issue or jsut the issues header information. Example: # Create an Item (ce100) - >>> item = Item("ce", 100) + >>> item = Item("ce", 100, True) Attributes: lastUpdated: An ISO 8601 formatted time string showing the last time the file was updated according to the filesystem. headers: A list of dictionaries containing header keys and values. - content: A list of section dictionaries. + content: A list of section dictionaries (only included if wholeItem is True). isLocked: A boolean showing whether or not a lockfile for the item is present. userEmail: The email address of the person who this item is from. userName: The real name of the person who this item is from. @@ -108,6 +108,7 @@ class Item: def __init__(self, queue: str, number: int, wholeItem: bool) -> None: self.queue = queue + try: self.number = int(number) except ValueError: @@ -118,10 +119,7 @@ def __init__(self, queue: str, number: int, wholeItem: bool) -> None: self.lastUpdated = self.__getLastUpdated() self.__rawItem = self.__getRawItem() self.headers = self.__parseHeaders() - - if wholeItem: - self.content = self.__parseSections() - + if wholeItem: self.content = self.__parseSections() self.isLocked = self.__isLocked() self.userEmail = self.__parseFromData(data="userEmail") self.userName = self.__parseFromData(data="userName") @@ -134,28 +132,32 @@ def __init__(self, queue: str, number: int, wholeItem: bool) -> None: self.building = self.__getMostRecentHeaderByType("Building") self.dateReceived = self.__getFormattedDate( self.__getMostRecentHeaderByType("Date")) - - # TODO: Autopopulate jsonData w/ __dir__() command. Exclude `^_` and `jsonData`. - self.jsonData = { - "queue": self.queue, - "number": self.number, - "lastUpdated": self.lastUpdated, - "headers": self.headers, - #"content": self.content, - "isLocked": self.isLocked, - "userEmail": self.userEmail, - "userName": self.userName, - "userAlias": self.userAlias, - "assignedTo": self.assignedTo, - "subject": self.subject, - "status": self.status, - "priority": self.priority, - "department": self.department, - "building": self.building, - "dateReceived": self.dateReceived - } - if wholeItem: - self.jsonData["content"] = self.content + self.jsonData = {} + + for attribute in self.__dir__(): + if "_" not in attribute and attribute != "toJson" and attribute != "jsonData": + self.jsonData[attribute] = self.__getattribute__(attribute) + + # self.jsonData = { + # "queue": self.queue, + # "number": self.number, + # "lastUpdated": self.lastUpdated, + # "headers": self.headers, + # #"content": self.content, + # "isLocked": self.isLocked, + # "userEmail": self.userEmail, + # "userName": self.userName, + # "userAlias": self.userAlias, + # "assignedTo": self.assignedTo, + # "subject": self.subject, + # "status": self.status, + # "priority": self.priority, + # "department": self.department, + # "building": self.building, + # "dateReceived": self.dateReceived + # } + # if wholeItem: + # self.jsonData["content"] = self.content def __getLastUpdated(self) -> str: """Returns last modified time of item reported by the filesystem in mm-dd-yy hh:mm am/pm format. @@ -1338,8 +1340,5 @@ def loadQueues() -> list: return queues if __name__ == "__main__": - queueList = [] - validQueues = getValidQueues() - for queue in validQueues: - queueList.append(Queue(queue).toJson()) + item = Item("ce", 100, False) print() \ No newline at end of file From 6e6492b70efa72305340e910c449cbdd7ad5bab3 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Mon, 23 Nov 2020 13:31:00 -0500 Subject: [PATCH 003/129] Added background state varible and created lastUpdatedCell component to control cell color based on date of last update --- src/components/ItemTable/ItemTable.js | 36 +++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 505617f..e4017d3 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -10,6 +10,34 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); + const [background, setBackground] = useState("#ffffff"); + + const setStyle = (background) => { + setBackground(background); + }; + + const LastUpdatedCell = ({ time }) => { + const lastUpdated = new Date(time).getTime(); + const now = new Date().getTime(); + const timeDelta = now - lastUpdated; + const day = 24 * 60 * 60 * 1000; + const week = 7 * day; + const month = 4 * week; + + setStyle("red"); + + if (timeDelta > day && timeDelta < week && timeDelta < month) { + setStyle("yellow"); + } else if (timeDelta > week && timeDelta < month) { + setStyle("purple"); + } else if (timeDelta > month) { + setStyle("green"); + } + return( + + ); + }; + const theme = useTheme(); const useStyles = makeStyles({ // Fully visible for active icons @@ -48,7 +76,7 @@ export default function ItemTable({ data }) { { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, { Header: 'Priority', accessor: 'priority' }, - { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, + { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, { Header: 'Date Received', accessor: 'dateReceived', Cell: ({ value }) => }, @@ -135,7 +163,11 @@ export default function ItemTable({ data }) { selected={isSelected} {...row.getRowProps()} > {row.cells.map(cell => ( - + {cell.render("Cell")} ))} From a6d81321764222fea9a043b43e7e72ab95c61588 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Wed, 25 Nov 2020 12:59:14 -0500 Subject: [PATCH 004/129] Removed uncesscary function and variables. Changed name of the state variable to make more specific and clear. --- src/components/ItemTable/ItemTable.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index e4017d3..7812195 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -10,11 +10,9 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - const [background, setBackground] = useState("#ffffff"); + const [cellBackgroundColor, setCellBackgroundColor] = useState("#ffffff"); - const setStyle = (background) => { - setBackground(background); - }; + const LastUpdatedCell = ({ time }) => { const lastUpdated = new Date(time).getTime(); @@ -24,14 +22,15 @@ export default function ItemTable({ data }) { const week = 7 * day; const month = 4 * week; - setStyle("red"); - - if (timeDelta > day && timeDelta < week && timeDelta < month) { - setStyle("yellow"); - } else if (timeDelta > week && timeDelta < month) { - setStyle("purple"); - } else if (timeDelta > month) { - setStyle("green"); + if (timeDelta > day && timeDelta < week && timeDelta < month)//more than one day since last + { + setCellBackgroundColor("yellow"); + } else if (timeDelta > week && timeDelta < month) // more than a week since last update + { + setCellBackgroundColor("purple"); + } else if (timeDelta > month) //more than a month since last update + { + setCellBackgroundColor("green"); } return( @@ -165,7 +164,7 @@ export default function ItemTable({ data }) { {row.cells.map(cell => ( {cell.render("Cell")} From 0123593cb0c0358df270fc48032c209d466de6f7 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 29 Nov 2020 13:13:20 -0500 Subject: [PATCH 005/129] Remove debugging comments --- api/ECNQueue.py | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 904e7f0..2d44844 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -51,7 +51,7 @@ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") -#queueDirectory = "/home/pier/e/benne238/personalQueues" + # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -138,27 +138,6 @@ def __init__(self, queue: str, number: int, wholeItem: bool) -> None: if "_" not in attribute and attribute != "toJson" and attribute != "jsonData": self.jsonData[attribute] = self.__getattribute__(attribute) - # self.jsonData = { - # "queue": self.queue, - # "number": self.number, - # "lastUpdated": self.lastUpdated, - # "headers": self.headers, - # #"content": self.content, - # "isLocked": self.isLocked, - # "userEmail": self.userEmail, - # "userName": self.userName, - # "userAlias": self.userAlias, - # "assignedTo": self.assignedTo, - # "subject": self.subject, - # "status": self.status, - # "priority": self.priority, - # "department": self.department, - # "building": self.building, - # "dateReceived": self.dateReceived - # } - # if wholeItem: - # self.jsonData["content"] = self.content - def __getLastUpdated(self) -> str: """Returns last modified time of item reported by the filesystem in mm-dd-yy hh:mm am/pm format. From db08a0f97cb0a870e04c7c91448d44fe5e18fcb3 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 29 Nov 2020 15:17:38 -0500 Subject: [PATCH 006/129] Change wholeItem to headersOnly and add to Item, Queue and loadAllQueues --- api/ECNQueue.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 2d44844..6ee4122 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -87,12 +87,12 @@ class Item: Example: # Create an Item (ce100) - >>> item = Item("ce", 100, True) + >>> item = Item("ce", 100, headersOnly=false) Attributes: lastUpdated: An ISO 8601 formatted time string showing the last time the file was updated according to the filesystem. headers: A list of dictionaries containing header keys and values. - content: A list of section dictionaries (only included if wholeItem is True). + content: A list of section dictionaries (only included if headersOnly is False). isLocked: A boolean showing whether or not a lockfile for the item is present. userEmail: The email address of the person who this item is from. userName: The real name of the person who this item is from. @@ -106,7 +106,7 @@ class Item: jsonData: A JSON serializable representation of the Item. """ - def __init__(self, queue: str, number: int, wholeItem: bool) -> None: + def __init__(self, queue: str, number: int, headersOnly: bool = False) -> None: self.queue = queue try: @@ -119,7 +119,7 @@ def __init__(self, queue: str, number: int, wholeItem: bool) -> None: self.lastUpdated = self.__getLastUpdated() self.__rawItem = self.__getRawItem() self.headers = self.__parseHeaders() - if wholeItem: self.content = self.__parseSections() + if not headersOnly: self.content = self.__parseSections() self.isLocked = self.__isLocked() self.userEmail = self.__parseFromData(data="userEmail") self.userName = self.__parseFromData(data="userName") @@ -1209,8 +1209,9 @@ class Queue: jsonData: A JSON serializable representation of the Queue. """ - def __init__(self, name: str) -> None: + def __init__(self, name: str, headersOnly: bool = True) -> None: self.name = name + self.headersOnly = headersOnly self.__directory = queueDirectory + "/" + self.name + "/" self.items = self.__getItems() @@ -1233,7 +1234,7 @@ def __getItems(self) -> list: isFile = True if os.path.isfile(itemPath) else False if isFile and isValidItemName(item): - items.append(Item(self.name, item, False)) + items.append(Item(self.name, item, headersOnly=self.headersOnly)) return items @@ -1306,7 +1307,7 @@ def getQueueCounts() -> list: return queueInfo -def loadQueues() -> list: +def loadAllQueues(headersOnly: bool = True) -> list: """Return a list of Queues for each queue. Returns: @@ -1315,9 +1316,6 @@ def loadQueues() -> list: queues = [] for queue in getValidQueues(): - queues.append(Queue(queue)) + queues.append(Queue(queue, headersOnly=headersOnly)) - return queues -if __name__ == "__main__": - item = Item("ce", 100, False) - print() \ No newline at end of file + return queues \ No newline at end of file From 5dc0aa72f42d1e45a9f9c8abfd68b560330ced27 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 29 Nov 2020 17:06:15 -0500 Subject: [PATCH 007/129] Update docs --- api/ECNQueue.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 6ee4122..881fb4b 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -83,11 +83,13 @@ def isValidItemName(name: str) -> bool: # Classes #------------------------------------------------------------------------------# class Item: - """A single whole issue or jsut the issues header information. + """A chronological representation of an interaction with a user. Example: # Create an Item (ce100) >>> item = Item("ce", 100, headersOnly=false) + # Create an Item without parsing its contents (ce100) + >>> item = Item("ce", 100, headersOnly=True) Attributes: lastUpdated: An ISO 8601 formatted time string showing the last time the file was updated according to the filesystem. @@ -104,17 +106,17 @@ class Item: department: The most recent department for this item. dateReceived: The date this item was created. jsonData: A JSON serializable representation of the Item. + + Raises: + ValueError: When the number passed to the constructor cannot be parsed. """ def __init__(self, queue: str, number: int, headersOnly: bool = False) -> None: self.queue = queue - try: self.number = int(number) except ValueError: - raise ValueError(" Could not convert \"" + - number + "\" to an integer") - + raise ValueError(f'Could not convert "{number}" to an integer') self.__path = "/".join([queueDirectory, self.queue, str(self.number)]) self.lastUpdated = self.__getLastUpdated() self.__rawItem = self.__getRawItem() @@ -130,8 +132,7 @@ def __init__(self, queue: str, number: int, headersOnly: bool = False) -> None: self.priority = self.__getMostRecentHeaderByType("Priority") self.department = self.__getMostRecentHeaderByType("Department") self.building = self.__getMostRecentHeaderByType("Building") - self.dateReceived = self.__getFormattedDate( - self.__getMostRecentHeaderByType("Date")) + self.dateReceived = self.__getFormattedDate(self.__getMostRecentHeaderByType("Date")) self.jsonData = {} for attribute in self.__dir__(): @@ -1197,11 +1198,13 @@ def __repr__(self) -> str: # TODO: Make Queue iterable using __iter__. See: https://thispointer.com/python-how-to-make-a-class-iterable-create-iterator-class-for-it/ class Queue: - """A collection of items. + """A collection of Items. Example: # Create a queue (ce) >>> queue = Queue("ce") + # Create a queue without parsing item contents (ce) + >>> queue = Queue("ce", headersOnly=False) Attributes: name: The name of the queue. @@ -1306,12 +1309,20 @@ def getQueueCounts() -> list: queueInfo.append( {"name": queue, "number_of_items": len(validItems)} ) return queueInfo - def loadAllQueues(headersOnly: bool = True) -> list: """Return a list of Queues for each queue. + Example: + # Load all Queues without parsing Item content + >>> loadAllQueues(); + Load all Queues and parsing Item content + >>> loadAllQueues(headersOnly=False) + + Args: + headersOnly (bool, optional): Whether or not to parse headers only. Defaults to True. + Returns: - list: list of Queues for each queue. + list: List of Queues for each queue. """ queues = [] From 21f347ca520d87cd4e35c602689b31ea471c564f Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 29 Nov 2020 17:10:16 -0500 Subject: [PATCH 008/129] Update docs --- api/ECNQueue.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 881fb4b..f9b6fce 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -22,10 +22,6 @@ Attributes: queueDirectory: The directory to load queues from. queuesToIgnore: Queues that will not be loaded when running getQueues() - -Raises: - # TODO: Add description(s) of when a ValueError is raised. - ValueError: [description] """ #------------------------------------------------------------------------------# From d8225d8cb563c81259721019c4fdd4c9f10f2bb6 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 29 Nov 2020 22:05:34 -0500 Subject: [PATCH 009/129] Add headersOnly flags to API --- api/api.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/api/api.py b/api/api.py index a4973fd..301117b 100644 --- a/api/api.py +++ b/api/api.py @@ -1,4 +1,4 @@ -from flask import Flask +from flask import Flask, request from flask_restful import Api, Resource import ECNQueue @@ -40,7 +40,9 @@ def get(self, queue: str, number: int) -> str: Returns: str: JSON representation of the item requested. """ - return ECNQueue.Item(queue, number, True).toJson() + + headersOnly = True if request.args.get("headersOnly") == "True" else False + return ECNQueue.Item(queue, number, headersOnly=headersOnly).toJson() class Queue(Resource): def get(self, queue: str) -> str: @@ -52,12 +54,12 @@ def get(self, queue: str) -> str: Returns: str: JSON representation of the queue requested. """ + headersOnly = False if request.args.get("headersOnly") == "False" else True queues_requested = queue.split("+") queues = [] for queue in queues_requested: - queues.append(ECNQueue.Queue(queue).toJson()) - + queues.append(ECNQueue.Queue(queue, headersOnly=headersOnly).toJson()) return queues class QueueList(Resource): @@ -88,4 +90,4 @@ def get(self) -> list: if __name__ == "__main__": - app.run() + app.run() \ No newline at end of file From ab75000531e6f12240ba745e0ab73f638770c547 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Wed, 2 Dec 2020 17:24:15 -0500 Subject: [PATCH 010/129] Implemented logic for changing cell color based on last updated time. --- src/components/ItemTable/ItemTable.js | 59 +++++++++++++-------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 7812195..bb37d7e 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -1,7 +1,7 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; +import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme, Typography } from "@material-ui/core"; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" @@ -9,11 +9,7 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - - const [cellBackgroundColor, setCellBackgroundColor] = useState("#ffffff"); - - - + const LastUpdatedCell = ({ time }) => { const lastUpdated = new Date(time).getTime(); const now = new Date().getTime(); @@ -21,21 +17,25 @@ export default function ItemTable({ data }) { const day = 24 * 60 * 60 * 1000; const week = 7 * day; const month = 4 * week; - - if (timeDelta > day && timeDelta < week && timeDelta < month)//more than one day since last - { - setCellBackgroundColor("yellow"); - } else if (timeDelta > week && timeDelta < month) // more than a week since last update - { - setCellBackgroundColor("purple"); - } else if (timeDelta > month) //more than a month since last update - { - setCellBackgroundColor("green"); - } - return( + +let alpha = "rgba(255, 0, 0, " + lastUpdated/now + ")"; +console.log(alpha); + + + let backgroundColor = "white" + + timeDelta > month ? backgroundColor = alpha : + timeDelta > week ? backgroundColor = alpha : + timeDelta > day ? backgroundColor = alpha : + backgroundColor = "white" + return ( + + + + ); - }; + }; const theme = useTheme(); const useStyles = makeStyles({ @@ -61,7 +61,8 @@ export default function ItemTable({ data }) { borderLeftWidth: "1px", borderLeftStyle: "solid", borderColor: theme.palette.type === "light" ? theme.palette.grey[300] : theme.palette.grey[500] - } + }, + }); const classes = useStyles(); @@ -75,7 +76,7 @@ export default function ItemTable({ data }) { { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, { Header: 'Priority', accessor: 'priority' }, - { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, + { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, { Header: 'Date Received', accessor: 'dateReceived', Cell: ({ value }) => }, @@ -93,7 +94,7 @@ export default function ItemTable({ data }) { onChange={(event) => setFilter(event.target.value)} /> ); - } + }, }, }, useFilters, useFlexLayout, useSortBy, @@ -102,7 +103,7 @@ export default function ItemTable({ data }) { return ( - +
{headerGroups.map(headerGroup => ( @@ -162,13 +163,11 @@ export default function ItemTable({ data }) { selected={isSelected} {...row.getRowProps()} > {row.cells.map(cell => ( - - {cell.render("Cell")} - + + cell.render( + cell.column.id === "lastUpdated" ? : {cell.value} + ) + ))} ); From 6b6790242c8db7112de489ea9159035ec44577b9 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Wed, 2 Dec 2020 20:16:42 -0500 Subject: [PATCH 011/129] implemented logic that sets color of lastUpdated cell based on time of items last update. --- src/components/ItemTable/ItemTable.js | 58 ++++++++++++++++++--------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index bb37d7e..d591454 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -1,7 +1,8 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme, Typography } from "@material-ui/core"; +import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme, } from "@material-ui/core"; +import { red } from '@material-ui/core/colors'; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" @@ -10,30 +11,33 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - const LastUpdatedCell = ({ time }) => { + const LastUpdatedCell = ({ time, reactTableCellProps, classes }) => { const lastUpdated = new Date(time).getTime(); const now = new Date().getTime(); const timeDelta = now - lastUpdated; const day = 24 * 60 * 60 * 1000; - const week = 7 * day; - const month = 4 * week; + const week = day * 7; + const month = week * 4; + + let backgroundColor = "white"; + if (timeDelta > day && timeDelta <= week) { + backgroundColor = red[100] + } + else if (timeDelta > week && timeDelta <= month) { + backgroundColor = red[300] + } + else if (timeDelta > month) { + backgroundColor = red[500] + } -let alpha = "rgba(255, 0, 0, " + lastUpdated/now + ")"; -console.log(alpha); - - - let backgroundColor = "white" - - timeDelta > month ? backgroundColor = alpha : - timeDelta > week ? backgroundColor = alpha : - timeDelta > day ? backgroundColor = alpha : - backgroundColor = "white" return ( - - + - ); }; @@ -103,7 +107,10 @@ console.log(alpha); return ( -
+
{headerGroups.map(headerGroup => ( @@ -165,7 +172,20 @@ console.log(alpha); {row.cells.map(cell => ( cell.render( - cell.column.id === "lastUpdated" ? : {cell.value} + //conditonally renders custom cell component based on cell.column.id prop value + cell.column.id === "lastUpdated" + ? + : + + {cell.value} + ) ))} From c418a5adf658e12fa5e8480fceaaedb4c2c3f705 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Wed, 2 Dec 2020 22:05:32 -0500 Subject: [PATCH 012/129] Forammting fixes, removed uneccessary overrides, fixed date received render, --- src/components/ItemTable/ItemTable.js | 46 ++++++++++++++++----------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index d591454..044a310 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -10,7 +10,6 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - const LastUpdatedCell = ({ time, reactTableCellProps, classes }) => { const lastUpdated = new Date(time).getTime(); const now = new Date().getTime(); @@ -33,8 +32,10 @@ export default function ItemTable({ data }) { return ( @@ -66,7 +67,6 @@ export default function ItemTable({ data }) { borderLeftStyle: "solid", borderColor: theme.palette.type === "light" ? theme.palette.grey[300] : theme.palette.grey[500] }, - }); const classes = useStyles(); @@ -80,10 +80,10 @@ export default function ItemTable({ data }) { { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, { Header: 'Priority', accessor: 'priority' }, - { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, + { Header: 'Last Updated', accessor: 'lastUpdated', }, { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, - { Header: 'Date Received', accessor: 'dateReceived', Cell: ({ value }) => }, + { Header: 'Date Received', accessor: 'dateReceived', }, ], []); const tableInstance = useTable( @@ -107,7 +107,8 @@ export default function ItemTable({ data }) { return ( -
@@ -168,26 +169,33 @@ export default function ItemTable({ data }) { }} classes={{ root: isSelected ? classes.rowSelected : classes.bandedRows }} selected={isSelected} - {...row.getRowProps()} > + {...row.getRowProps()} + > {row.cells.map(cell => ( cell.render( - //conditonally renders custom cell component based on cell.column.id prop value + // Conditonally renders custom cell component based on cell.column.id prop value. cell.column.id === "lastUpdated" - ? - : - - {cell.value} - + />) : + cell.column.id === "dateReceived" + ? ( + + ) + : + + {cell.value} + ) - ))} ); From ad4935b5f07789986ddd2cca714fd24946052427 Mon Sep 17 00:00:00 2001 From: Jacob Daniel Bennett Date: Thu, 3 Dec 2020 11:42:41 -0500 Subject: [PATCH 013/129] Error parsing for empty headers in Additional info from user section --- api/ECNQueue.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 2cfcf98..b6e870c 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -915,6 +915,12 @@ def __userReplyParsing(self, replyContent: list, lineNumber: int) -> dict: if line == "\n": newLineCounter = newLineCounter + 1 + if newLineCounter == 2: + + if "datetime" not in replyFromInfo.keys(): + errorMessage = "Expected \"Date: [datetime]\" in the header info" + return self.__errorParsing(line, lineNumber + lineNum + 1, errorMessage) + elif line == "===============================================\n": endingDelimiterCount = endingDelimiterCount + 1 From c895ef1c219769f5b1e3391da0750009d89b411b Mon Sep 17 00:00:00 2001 From: Jacob Daniel Bennett Date: Thu, 3 Dec 2020 11:45:05 -0500 Subject: [PATCH 014/129] readabilty update --- api/ECNQueue.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index b6e870c..24e640d 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -915,9 +915,7 @@ def __userReplyParsing(self, replyContent: list, lineNumber: int) -> dict: if line == "\n": newLineCounter = newLineCounter + 1 - if newLineCounter == 2: - - if "datetime" not in replyFromInfo.keys(): + if newLineCounter == 2 and "datetime" not in replyFromInfo.keys(): errorMessage = "Expected \"Date: [datetime]\" in the header info" return self.__errorParsing(line, lineNumber + lineNum + 1, errorMessage) From d842e2c0110451fb99ad23cd672509cd1b2a6a73 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Wed, 9 Dec 2020 11:08:19 -0500 Subject: [PATCH 015/129] disabled autoResetSortBy to allow for sorting to persist when data changes. --- src/components/ItemTable/ItemTable.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index e45dc63..c19454a 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -11,7 +11,7 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data, rowCanBeSelected }) { const [selectedRow, setSelectedRow] = useState({ queue: null, number: null}); - const theme = useTheme(); + const theme = useTheme(); const useStyles = makeStyles({ // Fully visible for active icons activeSortIcon: { @@ -57,6 +57,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { { columns, data, + autoResetSortBy: false, defaultColumn: { Filter: ({ column: { Header, setFilter } }) => { return ( @@ -68,7 +69,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { } }, }, - useFilters, useFlexLayout, useSortBy, + useFilters, useFlexLayout, useSortBy, ); const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; @@ -136,7 +137,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows }} {...row.getRowProps()} > {row.cells.map(cell => ( - From 140c71e9f4a6f4855a86500dc2731313d965cf24 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Fri, 11 Dec 2020 11:33:23 -0500 Subject: [PATCH 016/129] Removed Paper render to remove extraneous shadows --- src/components/ItemTable/ItemTable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index e45dc63..30bb651 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -73,7 +73,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; return ( - +
{headerGroups.map(headerGroup => ( From 3a951074f3070e84591d532c1f36b106d9843e55 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Fri, 11 Dec 2020 11:34:59 -0500 Subject: [PATCH 017/129] Changed the table render to the small variant in order to reduce uneeded whitespace --- src/components/ItemTable/ItemTable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 30bb651..059494f 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -74,7 +74,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { return ( -
+
{headerGroups.map(headerGroup => ( From 561d43520860ac8254ce959620802c658352f4d5 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Fri, 11 Dec 2020 12:04:19 -0500 Subject: [PATCH 018/129] Styling fixes for sort by buttons to add visual weight and make them easier to see what columns the buttons are related to. --- src/components/ItemTable/ItemTable.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 059494f..65c6cf2 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -1,7 +1,7 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; +import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" @@ -88,7 +88,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { { const isSortedAsc = column.isSorted && !column.isSortedDesc; isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false) @@ -96,11 +96,11 @@ export default function ItemTable({ data, rowCanBeSelected }) { > { const isSortedDesc = column.isSorted && column.isSortedDesc; isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true) @@ -108,7 +108,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { > From 2cccad286e1ac62907cb61815e08f95a0c08130a Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Fri, 11 Dec 2020 13:09:17 -0500 Subject: [PATCH 019/129] Set autoResetFilters to false in order to stop filters from resetting on data change. --- src/components/ItemTable/ItemTable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index c19454a..2839e33 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -58,6 +58,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { columns, data, autoResetSortBy: false, + autoResetFilters:false, defaultColumn: { Filter: ({ column: { Header, setFilter } }) => { return ( From c20b9b870a3f5ea55cbf5dda1b60cc521e19bf59 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 15 Dec 2020 21:54:39 -0500 Subject: [PATCH 020/129] Minor formatting --- src/components/ItemTable/ItemTable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 2839e33..6c4df69 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -58,7 +58,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { columns, data, autoResetSortBy: false, - autoResetFilters:false, + autoResetFilters: false, defaultColumn: { Filter: ({ column: { Header, setFilter } }) => { return ( From 4c57b614c7e9a403898c56d582f5e4f723e4cd2e Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Wed, 16 Dec 2020 14:38:24 -0500 Subject: [PATCH 021/129] Created ItemTableCell and LastUpdated cell components for refactoring ItemTable --- src/components/ItemTable/ItemTable.js | 79 +++++++++---------- src/components/ItemTableCell/ItemTableCell.js | 22 ++++++ src/components/ItemTableCell/ItemTableCell.md | 0 src/components/ItemTableCell/index.js | 3 + .../LastUpdatedCell.js/LastUpdatedCell.js | 36 +++++++++ .../LastUpdatedCell.js/LastUpdatedCell.md | 0 src/components/LastUpdatedCell.js/index.js | 3 + 7 files changed, 103 insertions(+), 40 deletions(-) create mode 100644 src/components/ItemTableCell/ItemTableCell.js create mode 100644 src/components/ItemTableCell/ItemTableCell.md create mode 100644 src/components/ItemTableCell/index.js create mode 100644 src/components/LastUpdatedCell.js/LastUpdatedCell.js create mode 100644 src/components/LastUpdatedCell.js/LastUpdatedCell.md create mode 100644 src/components/LastUpdatedCell.js/index.js diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 044a310..c333551 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -7,40 +7,42 @@ import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; +import ItemTableCell from "../ItemTableCell"; +import LastUpdatedCell from "../LastUpdatedCell.js/LastUpdatedCell"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - const LastUpdatedCell = ({ time, reactTableCellProps, classes }) => { - const lastUpdated = new Date(time).getTime(); - const now = new Date().getTime(); - const timeDelta = now - lastUpdated; - const day = 24 * 60 * 60 * 1000; - const week = day * 7; - const month = week * 4; + // const LastUpdatedCell = ({ time, reactTableCellProps, classes }) => { + // const lastUpdated = new Date(time).getTime(); + // const now = new Date().getTime(); + // const timeDelta = now - lastUpdated; + // const day = 24 * 60 * 60 * 1000; + // const week = day * 7; + // const month = week * 4; - let backgroundColor = "white"; - if (timeDelta > day && timeDelta <= week) { - backgroundColor = red[100] - } - else if (timeDelta > week && timeDelta <= month) { - backgroundColor = red[300] - } - else if (timeDelta > month) { - backgroundColor = red[500] - } + // let backgroundColor = "white"; + // if (timeDelta > day && timeDelta <= week) { + // backgroundColor = red[100] + // } + // else if (timeDelta > week && timeDelta <= month) { + // backgroundColor = red[300] + // } + // else if (timeDelta > month) { + // backgroundColor = red[500] + // } - return ( - - - - ); - }; + // return ( + // + // + // + // ); + // }; const theme = useTheme(); const useStyles = makeStyles({ @@ -71,7 +73,6 @@ export default function ItemTable({ data }) { const classes = useStyles(); const history = useHistory(); - const columns = React.useMemo( () => [ { Header: 'Queue', accessor: 'queue', }, @@ -179,22 +180,20 @@ export default function ItemTable({ data }) { ? () : + + />) : cell.column.id === "dateReceived" - ? ( - ) + ) : - {cell.value} - + ) ))} diff --git a/src/components/ItemTableCell/ItemTableCell.js b/src/components/ItemTableCell/ItemTableCell.js new file mode 100644 index 0000000..7f93273 --- /dev/null +++ b/src/components/ItemTableCell/ItemTableCell.js @@ -0,0 +1,22 @@ +import { makeStyles, TableCell, useTheme } from '@material-ui/core' +import React from 'react' + +export default function ItemTableCell({ reactTableCellProps, children, style }) { + + const theme = useTheme(); + + const useStyles = makeStyles({ + columnBorders: { + borderLeftWidth: "1px", + borderLeftStyle: "solid", + borderColor: theme.palette.type === "light" ? theme.palette.grey[300] : theme.palette.grey[500] + }, + }) + + const classes = useStyles(); + return ( + + {children} + + ); +} diff --git a/src/components/ItemTableCell/ItemTableCell.md b/src/components/ItemTableCell/ItemTableCell.md new file mode 100644 index 0000000..e69de29 diff --git a/src/components/ItemTableCell/index.js b/src/components/ItemTableCell/index.js new file mode 100644 index 0000000..a358a7b --- /dev/null +++ b/src/components/ItemTableCell/index.js @@ -0,0 +1,3 @@ +import ItemTableCell from "./ItemTableCell"; + +export default ItemTableCell; \ No newline at end of file diff --git a/src/components/LastUpdatedCell.js/LastUpdatedCell.js b/src/components/LastUpdatedCell.js/LastUpdatedCell.js new file mode 100644 index 0000000..27effae --- /dev/null +++ b/src/components/LastUpdatedCell.js/LastUpdatedCell.js @@ -0,0 +1,36 @@ +import React from 'react' +import { red } from '@material-ui/core/colors'; +import RelativeTime from 'react-relative-time'; +import ItemTableCell from '../ItemTableCell'; + +export default function LastUpdatedCell ({ time, reactTableCellProps, classes }){ + const lastUpdated = new Date(time).getTime(); + const now = new Date().getTime(); + const timeDelta = now - lastUpdated; + const day = 24 * 60 * 60 * 1000; + const week = day * 7; + const month = week * 4; + + let backgroundColor = "white"; + if (timeDelta > day && timeDelta <= week) { + backgroundColor = red[100] + } + else if (timeDelta > week && timeDelta <= month) { + backgroundColor = red[300] + } + else if (timeDelta > month) { + backgroundColor = red[500] + } + + return ( + + + + ); +} diff --git a/src/components/LastUpdatedCell.js/LastUpdatedCell.md b/src/components/LastUpdatedCell.js/LastUpdatedCell.md new file mode 100644 index 0000000..e69de29 diff --git a/src/components/LastUpdatedCell.js/index.js b/src/components/LastUpdatedCell.js/index.js new file mode 100644 index 0000000..42d1ac9 --- /dev/null +++ b/src/components/LastUpdatedCell.js/index.js @@ -0,0 +1,3 @@ +import LastUpdatedCell from "./ItemTableCell"; + +export default LastUpdatedCell; \ No newline at end of file From 566efcafd853ee453ebc3151f45a00006179bdf3 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 16 Dec 2020 16:52:17 -0500 Subject: [PATCH 022/129] Add spacing for table --- src/components/ItemTable/ItemTable.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 65c6cf2..89050fa 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -9,9 +9,9 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data, rowCanBeSelected }) { - const [selectedRow, setSelectedRow] = useState({ queue: null, number: null}); + const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); - const theme = useTheme(); + const theme = useTheme(); const useStyles = makeStyles({ // Fully visible for active icons activeSortIcon: { @@ -34,6 +34,12 @@ export default function ItemTable({ data, rowCanBeSelected }) { borderLeftStyle: "solid", borderColor: theme.palette.type === "light" ? theme.palette.grey[300] : theme.palette.grey[500] }, + tableMargin: { + marginTop: theme.spacing(2) + }, + tableHeaderMargin: { + marginBottom: theme.spacing(1) + } }); const classes = useStyles(); @@ -74,13 +80,14 @@ export default function ItemTable({ data, rowCanBeSelected }) { return ( -
+
+ {headerGroups.map(headerGroup => ( {headerGroup.headers.map(column => ( - + {column.render("Filter")} @@ -120,6 +127,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { ))} + {rows.map((row, i) => { prepareRow(row); @@ -136,7 +144,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows }} {...row.getRowProps()} > {row.cells.map(cell => ( - @@ -147,6 +155,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { ); })} +
); From 56d6f28315cfce67a744c7996cbfaa93f08ff368 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 16 Dec 2020 16:52:31 -0500 Subject: [PATCH 023/129] Remove unused classes --- src/components/ItemTable/ItemTable.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 89050fa..ce1987a 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -13,14 +13,6 @@ export default function ItemTable({ data, rowCanBeSelected }) { const theme = useTheme(); const useStyles = makeStyles({ - // Fully visible for active icons - activeSortIcon: { - opacity: 1, - }, - // Half visible for inactive icons - inactiveSortIcon: { - opacity: 0.2, - }, rowSelected: { backgroundColor: theme.palette.type === 'light' ? theme.palette.primary[100] : theme.palette.primary[600], }, From ae03e1378e2a8be02147bf978f266926d8671e8f Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Thu, 17 Dec 2020 12:20:11 -0500 Subject: [PATCH 024/129] Fixed background color not displaying in LastUpdatedCell component --- src/components/ItemTable/ItemTable.js | 32 +------------------ src/components/ItemTableCell/ItemTableCell.js | 23 +++++++++++-- .../LastUpdatedCell.js/LastUpdatedCell.js | 18 +++++++++++ 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index c333551..b6a16df 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -12,37 +12,7 @@ import LastUpdatedCell from "../LastUpdatedCell.js/LastUpdatedCell"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - // const LastUpdatedCell = ({ time, reactTableCellProps, classes }) => { - // const lastUpdated = new Date(time).getTime(); - // const now = new Date().getTime(); - // const timeDelta = now - lastUpdated; - // const day = 24 * 60 * 60 * 1000; - // const week = day * 7; - // const month = week * 4; - // let backgroundColor = "white"; - // if (timeDelta > day && timeDelta <= week) { - // backgroundColor = red[100] - // } - // else if (timeDelta > week && timeDelta <= month) { - // backgroundColor = red[300] - // } - // else if (timeDelta > month) { - // backgroundColor = red[500] - // } - - // return ( - // - // - // - // ); - // }; const theme = useTheme(); const useStyles = makeStyles({ @@ -107,7 +77,7 @@ export default function ItemTable({ data }) { const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; return ( - + + {children} ); } + +ItemTableCell.propTypes = { + /** Props passed from ItemTable. */ + "reactTableProps": PropTypes.object, + /** Sets background color*/ + "backgroundColor": PropTypes.string, + /** Child object passed to display cell data. */ + "children": PropTypes.object, + +}; + +ItemTableCell.defaultProps = { + "reactTableProps": {}, + "backgroundColor": "", + "children": {}, +}; \ No newline at end of file diff --git a/src/components/LastUpdatedCell.js/LastUpdatedCell.js b/src/components/LastUpdatedCell.js/LastUpdatedCell.js index 27effae..48e0c7e 100644 --- a/src/components/LastUpdatedCell.js/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell.js/LastUpdatedCell.js @@ -1,4 +1,5 @@ import React from 'react' +import PropTypes from "prop-types"; import { red } from '@material-ui/core/colors'; import RelativeTime from 'react-relative-time'; import ItemTableCell from '../ItemTableCell'; @@ -29,8 +30,25 @@ export default function LastUpdatedCell ({ time, reactTableCellProps, classes } {...reactTableCellProps} // Expands style prop of table cell to allow addtion of custom styling without losing default styling. style={{...reactTableCellProps.style, backgroundColor: backgroundColor }} + backgroundColor={backgroundColor} > ); } + +LastUpdatedCell.propTypes = { + /** Time value in ISO8601. */ + "time": PropTypes.string, + /** Props passed from ItemTable. */ + "reactTableProps": PropTypes.object, + /**Object that passes classes to the component. */ + "classes": PropTypes.object, + +}; + +LastUpdatedCell.defaultProps = { + "time": "", + "reactTableProps": {}, + "classes": {}, +}; \ No newline at end of file From 3effeb7e314c5fd9ac4902a71dc44b18e97723b4 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Thu, 17 Dec 2020 15:04:13 -0500 Subject: [PATCH 025/129] Refactored sorting to its own component --- src/components/ItemTable/ItemTable.js | 60 ++++++++----------- .../ItemTableSortButtons.js | 31 ++++++++++ .../ItemTableSortButtons.md | 0 .../ItemTableSortButtons.js/index.js | 3 + 4 files changed, 60 insertions(+), 34 deletions(-) create mode 100644 src/components/ItemTableSortButtons.js/ItemTableSortButtons.js create mode 100644 src/components/ItemTableSortButtons.js/ItemTableSortButtons.md create mode 100644 src/components/ItemTableSortButtons.js/index.js diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 65c6cf2..e547b78 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -1,17 +1,16 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; +import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Grid, makeStyles, useTheme } from "@material-ui/core"; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; -import ItemTableFilter from "../ItemTableFilter/" -import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; - +import ItemTableFilter from "../ItemTableFilter/"; +import ItemtTableSortButtons from "../ItemTableSortButtons.js"; export default function ItemTable({ data, rowCanBeSelected }) { - const [selectedRow, setSelectedRow] = useState({ queue: null, number: null}); + const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); - const theme = useTheme(); + const theme = useTheme(); const useStyles = makeStyles({ // Fully visible for active icons activeSortIcon: { @@ -74,7 +73,12 @@ export default function ItemTable({ data, rowCanBeSelected }) { return ( -
+
{headerGroups.map(headerGroup => ( @@ -86,32 +90,20 @@ export default function ItemTable({ data, rowCanBeSelected }) { {column.render("Filter")} - - { - const isSortedAsc = column.isSorted && !column.isSortedDesc; - isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false) - })} - > - - - { - const isSortedDesc = column.isSorted && column.isSortedDesc; - isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true) - })} - > - - - + { + const isSortedAsc = column.isSorted && !column.isSortedDesc; + isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false); + }} + onClickDesc={_ => { + const isSortedDesc = column.isSorted && column.isSortedDesc; + isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true) + }} + colorAsc={column.isSorted && column.isSortedDesc === false ? "secondary" : "default"} + colorDesc={column.isSorted && column.isSortedDesc ? "secondary" : "default"} + columnSortAscProps={column.getSortByToggleProps()} + columnSortDescProps={column.getSortByToggleProps(column.isSortedDesc)} + /> @@ -136,7 +128,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows }} {...row.getRowProps()} > {row.cells.map(cell => ( - diff --git a/src/components/ItemTableSortButtons.js/ItemTableSortButtons.js b/src/components/ItemTableSortButtons.js/ItemTableSortButtons.js new file mode 100644 index 0000000..f7c6cd8 --- /dev/null +++ b/src/components/ItemTableSortButtons.js/ItemTableSortButtons.js @@ -0,0 +1,31 @@ +import React from 'react'; +import PropTypes from "prop-types"; +import { ButtonGroup, IconButton } from "@material-ui/core"; +import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; + +export default function ItemTableSortButtons({ onClickAsc, onClickDesc, colorAsc, colorDesc, columnSortAscProps, columnSortDescProps }) { + return ( + + + + + + + + + ) +} + + diff --git a/src/components/ItemTableSortButtons.js/ItemTableSortButtons.md b/src/components/ItemTableSortButtons.js/ItemTableSortButtons.md new file mode 100644 index 0000000..e69de29 diff --git a/src/components/ItemTableSortButtons.js/index.js b/src/components/ItemTableSortButtons.js/index.js new file mode 100644 index 0000000..390adb0 --- /dev/null +++ b/src/components/ItemTableSortButtons.js/index.js @@ -0,0 +1,3 @@ +import ItemtTableSortButtons from './ItemTableSortButtons' + +export default ItemtTableSortButtons; \ No newline at end of file From 9aa5321c8506cbdfffa3a493712b396c24bc5237 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Fri, 18 Dec 2020 12:22:07 -0500 Subject: [PATCH 026/129] Fixed column border gap --- src/components/ItemTable/ItemTable.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 5cfce90..4160b41 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -28,9 +28,9 @@ export default function ItemTable({ data, rowCanBeSelected }) { tableMargin: { marginTop: theme.spacing(2) }, - tableHeaderMargin: { - marginBottom: theme.spacing(1) - } + tableHeaderPadding: { + paddingBottom: theme.spacing(2) + }, }); const classes = useStyles(); @@ -76,8 +76,8 @@ export default function ItemTable({ data, rowCanBeSelected }) { {headerGroups.map(headerGroup => ( {headerGroup.headers.map(column => ( - - + + {column.render("Filter")} @@ -123,7 +123,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { {...row.getRowProps()} > {row.cells.map(cell => ( {cell.render("Cell")} From 2bd362cc29bd93d07050a86210a2827ff3aa245f Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 30 Dec 2020 15:13:54 -0500 Subject: [PATCH 027/129] Update Python requirements to fix Flask_JWT_Extended and PyJWT conflict --- api/requirements.txt | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/api/requirements.txt b/api/requirements.txt index 1aaa908..d87bdac 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,22 +1,14 @@ -aniso8601==8.0.0 -astroid==2.4.2 -click==7.1.2 -Flask==1.1.2 -Flask-RESTful==0.3.8 -Flask-JWT-Extended==3.24.1 -gunicorn==20.0.4 -isort==4.3.21 -itsdangerous==1.1.0 -Jinja2==2.11.2 -lazy-object-proxy==1.4.3 -MarkupSafe==1.1.1 -mccabe==0.6.1 -pylint==2.5.3 -python-dateutil==2.8.1 -python-dotenv==0.15.0 -pytz==2020.1 -six==1.15.0 -toml==0.10.1 -typed-ast==1.4.1 -Werkzeug==1.0.1 -wrapt==1.12.1 +# See: https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file + +# General Utilities +gunicorn +pipdeptree +pylint + +# API +python-dotenv +Flask-RESTful +python-dateutil +Flask-JWT-Extended +# Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it +PyJWT == 1.* \ No newline at end of file From db5f1a17c8a89406b68ac1d4c40f790cd261ec47 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Wed, 30 Dec 2020 17:37:49 -0500 Subject: [PATCH 028/129] Refactored ItemTableFilter to allow the label to hide label overlfow in X direction without hiding overlfow in the Y direction --- .../ItemTableFilter/ItemTableFilter.js | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/components/ItemTableFilter/ItemTableFilter.js b/src/components/ItemTableFilter/ItemTableFilter.js index b5a2fae..bf64f60 100644 --- a/src/components/ItemTableFilter/ItemTableFilter.js +++ b/src/components/ItemTableFilter/ItemTableFilter.js @@ -1,35 +1,33 @@ -import React, { useState } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; -import { makeStyles, TextField } from "@material-ui/core"; +import { Box, FormControl, InputLabel, makeStyles, OutlinedInput,} from "@material-ui/core"; export default function ItemTableFilter({ label, onChange }) { - const useStyles = makeStyles({ - labelRoot: { - overflow: "hidden" - }, - labelFocused: { - overflow: "visible" + filterContainer: { + overflowX: "hidden" }, }); const classes = useStyles(); - const [isFocused, setIsFocused] = useState(false); - return ( - setIsFocused(true)} - onBlur={() => setIsFocused(false)} - className={ isFocused ? classes.labelFocused : classes.labelRoot } + + + > + {label} + + + ); - }; ItemTableFilter.propTypes = { From d0dc7fe05f10a30d40d5b3c9be102a2e31fada9a Mon Sep 17 00:00:00 2001 From: benne238 Date: Tue, 5 Jan 2021 16:52:51 -0500 Subject: [PATCH 029/129] Implementation of alphabetical sorting for the getQueueCounts function --- api/ECNQueue.py | 10 +++++++++- api/webqueueapi.egg-info/PKG-INFO | 10 ++++++++++ api/webqueueapi.egg-info/SOURCES.txt | 6 ++++++ api/webqueueapi.egg-info/dependency_links.txt | 1 + api/webqueueapi.egg-info/top_level.txt | 2 ++ 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 api/webqueueapi.egg-info/PKG-INFO create mode 100644 api/webqueueapi.egg-info/SOURCES.txt create mode 100644 api/webqueueapi.egg-info/dependency_links.txt create mode 100644 api/webqueueapi.egg-info/top_level.txt diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 2cfcf98..48fab26 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1331,7 +1331,11 @@ def getQueueCounts() -> list: possibleItems = os.listdir(queueDirectory + "/" + queue) validItems = [isValidItemName for file in possibleItems] queueInfo.append( {"name": queue, "number_of_items": len(validItems)} ) - return queueInfo + + # Sorts queueinfo alphabetically using the lambda function + sortedQueueInfo = sorted(queueInfo, key = lambda queueInfoList: queueInfoList['name']) + + return sortedQueueInfo def loadQueues() -> list: @@ -1346,3 +1350,7 @@ def loadQueues() -> list: queues.append(Queue(queue)) return queues + +if __name__ == "__main__": + getQueueCounts() + print() \ No newline at end of file diff --git a/api/webqueueapi.egg-info/PKG-INFO b/api/webqueueapi.egg-info/PKG-INFO new file mode 100644 index 0000000..d92f4ac --- /dev/null +++ b/api/webqueueapi.egg-info/PKG-INFO @@ -0,0 +1,10 @@ +Metadata-Version: 1.0 +Name: webqueueapi +Version: 1.0 +Summary: UNKNOWN +Home-page: UNKNOWN +Author: UNKNOWN +Author-email: UNKNOWN +License: UNKNOWN +Description: UNKNOWN +Platform: UNKNOWN diff --git a/api/webqueueapi.egg-info/SOURCES.txt b/api/webqueueapi.egg-info/SOURCES.txt new file mode 100644 index 0000000..2f0f7ee --- /dev/null +++ b/api/webqueueapi.egg-info/SOURCES.txt @@ -0,0 +1,6 @@ +api.py +setup.py +webqueueapi.egg-info/PKG-INFO +webqueueapi.egg-info/SOURCES.txt +webqueueapi.egg-info/dependency_links.txt +webqueueapi.egg-info/top_level.txt \ No newline at end of file diff --git a/api/webqueueapi.egg-info/dependency_links.txt b/api/webqueueapi.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/api/webqueueapi.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/api/webqueueapi.egg-info/top_level.txt b/api/webqueueapi.egg-info/top_level.txt new file mode 100644 index 0000000..7cc9ebf --- /dev/null +++ b/api/webqueueapi.egg-info/top_level.txt @@ -0,0 +1,2 @@ +ECNqueue +api From 2a50f127098739e26cdde05304251731f53de4b1 Mon Sep 17 00:00:00 2001 From: benne238 Date: Tue, 5 Jan 2021 16:56:21 -0500 Subject: [PATCH 030/129] removal of debugging tools --- api/ECNQueue.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 48fab26..c304c86 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1349,8 +1349,4 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues - -if __name__ == "__main__": - getQueueCounts() - print() \ No newline at end of file + return queues \ No newline at end of file From bb68f119161c563a507c6508d50bf06c2e5c6b28 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Fri, 8 Jan 2021 11:09:09 -0500 Subject: [PATCH 031/129] Implement logic for default sorting order of ItemTable --- src/components/ItemTable/ItemTable.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 6c4df69..e3e1bda 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -9,7 +9,7 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data, rowCanBeSelected }) { - const [selectedRow, setSelectedRow] = useState({ queue: null, number: null}); + const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); const theme = useTheme(); const useStyles = makeStyles({ @@ -69,8 +69,14 @@ export default function ItemTable({ data, rowCanBeSelected }) { ); } }, + initialState: { + sortBy: [ + { id: 'number', desc: false }, + { id: 'lastUpdated', desc: false }, + ] + } }, - useFilters, useFlexLayout, useSortBy, + useFilters, useFlexLayout, useSortBy, ); const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; From 7373d88d6131dcf957ff09f20f66aa1c61fd3acf Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Fri, 8 Jan 2021 13:32:32 -0500 Subject: [PATCH 032/129] Removed uncessary desc key from intialState.sortBy in the table option in ItemTable component --- src/components/ItemTable/ItemTable.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index e3e1bda..3f330c0 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -21,6 +21,9 @@ export default function ItemTable({ data, rowCanBeSelected }) { inactiveSortIcon: { opacity: 0.2, }, + container: { + maxHeight: 500, + }, rowSelected: { backgroundColor: theme.palette.type === 'light' ? theme.palette.primary[100] : theme.palette.primary[600], }, @@ -71,9 +74,9 @@ export default function ItemTable({ data, rowCanBeSelected }) { }, initialState: { sortBy: [ - { id: 'number', desc: false }, - { id: 'lastUpdated', desc: false }, - ] + { id: 'number' }, + { id: 'lastUpdated' }, + ], } }, useFilters, useFlexLayout, useSortBy, @@ -81,8 +84,8 @@ export default function ItemTable({ data, rowCanBeSelected }) { const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; return ( - -
+ +
{headerGroups.map(headerGroup => ( From 30d9cfedb712f1e2b32b272a18d029b13b79a692 Mon Sep 17 00:00:00 2001 From: benne238 Date: Mon, 11 Jan 2021 14:30:01 -0500 Subject: [PATCH 033/129] implementation of blank content handling --- api/ECNQueue.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 2cfcf98..28bf904 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -50,7 +50,8 @@ currentFilePath = __file__ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) -queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") +#queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") +queueDirectory = "/home/pier/e/benne238/personalQueues" # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -263,6 +264,12 @@ def __parseSections(self) -> list: for assignment in assignementLsit: sections.append(assignment) + # Checks for empty content within an item and returns and + if contentEnd == contentStart: + blankInitialMessage = self.__initialMessageParsing([""]) + sections.append(blankInitialMessage) + return sections + # Checks for Directory Identifiers if self.__rawItem[contentStart] == "\n" and self.__rawItem[contentStart + 1].startswith("\t"): @@ -1345,4 +1352,4 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues + return queues \ No newline at end of file From ea9dec3832c59a46dee0a35ae15ce2deb0e4da78 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Tue, 12 Jan 2021 10:45:07 -0500 Subject: [PATCH 034/129] Removed unecesssary classes/props --- src/components/ItemTable/ItemTable.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 3f330c0..acefcc7 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -84,8 +84,8 @@ export default function ItemTable({ data, rowCanBeSelected }) { const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; return ( - -
+ +
{headerGroups.map(headerGroup => ( From 02b9990f30e3ef22b9be682817f0c20c62c79d9d Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Tue, 12 Jan 2021 10:46:40 -0500 Subject: [PATCH 035/129] Removed unecessary class --- src/components/ItemTable/ItemTable.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index acefcc7..2ec28c7 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -21,9 +21,6 @@ export default function ItemTable({ data, rowCanBeSelected }) { inactiveSortIcon: { opacity: 0.2, }, - container: { - maxHeight: 500, - }, rowSelected: { backgroundColor: theme.palette.type === 'light' ? theme.palette.primary[100] : theme.palette.primary[600], }, From 0df01d799edee0f695a547f9735239a667861936 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Tue, 12 Jan 2021 13:06:20 -0500 Subject: [PATCH 036/129] Implemented code for hover styling in ItemTable --- src/components/ItemTable/ItemTable.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index e45dc63..22250e1 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -21,6 +21,12 @@ export default function ItemTable({ data, rowCanBeSelected }) { inactiveSortIcon: { opacity: 0.2, }, + hoverBackgroundColor: { + "&.MuiTableRow-root.MuiTableRow-hover:hover":{ + backgroundColor: theme.palette.primary[200], + + }, + }, rowSelected: { backgroundColor: theme.palette.type === 'light' ? theme.palette.primary[100] : theme.palette.primary[600], }, @@ -126,6 +132,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number return ( { history.push(`/${row.original.queue}/${row.original.number}`); setSelectedRow({ queue: row.original.queue, number: row.original.number }); @@ -133,7 +140,8 @@ export default function ItemTable({ data, rowCanBeSelected }) { // This functionality should be achieved by using the selected prop and // overriding the selected class but this applied the secondary color at 0.08% opacity. // Overridding the root class is a workaround. - classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows }} + classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows , hover: classes.hoverBackgroundColor}} + {...row.getRowProps()} > {row.cells.map(cell => ( Date: Tue, 12 Jan 2021 15:23:52 -0500 Subject: [PATCH 037/129] removal of queueDirectory testing code --- api/ECNQueue.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 28bf904..b0e1fd6 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -50,8 +50,7 @@ currentFilePath = __file__ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) -#queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") -queueDirectory = "/home/pier/e/benne238/personalQueues" +queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] From 1e819d8e52091dd9653ba4313a690c301cd60c5c Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 19 Jan 2021 17:58:40 -0500 Subject: [PATCH 038/129] Fix for greedy regular expressions causing improper header parsing --- api/ECNQueue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 24e640d..df564fe 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -212,7 +212,7 @@ def __parseHeaders(self) -> list: # Example: # [ce] QTime-Updated-By: campb303 becomes # QTime-Updated-By: campb303 - queuePrefixPattern = re.compile("\[.*\] {1}") + queuePrefixPattern = re.compile(r"\[.*?\] {1}") for lineNumber in range(self.__getHeaderBoundary()): line = self.__rawItem[lineNumber] lineHasQueuePrefix = queuePrefixPattern.match(line) From 8ac1d92dbafbc3e84d178a7231c657617dc8a7e1 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 30 Dec 2020 15:13:54 -0500 Subject: [PATCH 039/129] Update Python requirements to fix Flask_JWT_Extended and PyJWT (cherry picked from commit 47e071538ddbe100db93ec4a8059b166d9ebd2e5) --- api/requirements.txt | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/api/requirements.txt b/api/requirements.txt index 8a009e1..cc3692a 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,20 +1,19 @@ -aniso8601==8.0.0 -astroid==2.4.2 -click==7.1.2 -Flask==1.1.2 -Flask-RESTful==0.3.8 -gunicorn==20.0.4 -isort==4.3.21 -itsdangerous==1.1.0 -Jinja2==2.11.2 -lazy-object-proxy==1.4.3 -MarkupSafe==1.1.1 -mccabe==0.6.1 -pylint==2.5.3 -python-dateutil==2.8.1 -pytz==2020.1 -six==1.15.0 -toml==0.10.1 -typed-ast==1.4.1 -Werkzeug==1.0.1 -wrapt==1.12.1 +# See: https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file + +# General Utilities +gunicorn +pipdeptree +pylint + +# API +python-dotenv +Flask-RESTful +python-dateutil +Flask-JWT-Extended +# Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it +PyJWT == 1.* + +# API Documentation +mkdocs +mkdocs-material +mkautodoc From 7110cdacc6763430772915151b1c20b8bfdc1347 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 30 Dec 2020 17:14:23 -0500 Subject: [PATCH 040/129] Update venv-manager to allow 60 second for requirement installation (cherry picked from commit 5dd1da95824946384fa097c7040c6c7d83943151) --- utils/venv-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 72ecd3b..3bb15ce 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -79,7 +79,7 @@ def get_args() -> argparse.Namespace: return parser.parse_args() -def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: bool = True) -> tuple: +def run_logged_subprocess(command: Union[str, list], timeout: int = 60, shell: bool = True) -> tuple: """Executes a shell command using subprocess with logging. stderr is redirected to stdout and stdout is pipped to logger. @@ -96,7 +96,7 @@ def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: b Args: command (Union): The command to run. If shell=False, pass a list with the first item being the command and the subsequent items being arguments. If shell=True, pass a string as you would type it into a shell. - timeout (int): The number of seconds to wait for a program before killing it + timeout (int): The number of seconds to wait for a program before killing it. Defaults to 60. Returns: tuple: With the first value being the return code and second being the combined stdout+stderr From f36ac8e28e1cb32923bc335dae038cc22aaceabe Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 20 Jan 2021 11:49:52 -0500 Subject: [PATCH 041/129] Moved ternary statements to swtich statement for readability --- src/components/ItemTable/ItemTable.js | 51 +++++++++++++-------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index b6a16df..cb918f4 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -2,7 +2,6 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme, } from "@material-ui/core"; -import { red } from '@material-ui/core/colors'; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" @@ -13,7 +12,6 @@ import LastUpdatedCell from "../LastUpdatedCell.js/LastUpdatedCell"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); - const theme = useTheme(); const useStyles = makeStyles({ // Fully visible for active icons @@ -129,7 +127,7 @@ export default function ItemTable({ data }) { ))} - {rows.map((row, i) => { + {rows.map((row) => { prepareRow(row); let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number return ( @@ -143,29 +141,30 @@ export default function ItemTable({ data }) { {...row.getRowProps()} > {row.cells.map(cell => ( - - cell.render( - // Conditonally renders custom cell component based on cell.column.id prop value. - cell.column.id === "lastUpdated" - ? () : - cell.column.id === "dateReceived" - ? ( - - ) - : - - {cell.value} - - ) - ))} + cell.render(_ => { + switch (cell.column.id) { + case "dateReceived": + return ( + + + + ); + case "lastUpdated": + return ( + + ); + default: + return ( + + {cell.value} + + ); + } + }) + ))}; ); })} From 375b679b2df684986bc14bb4b6cdafbb0e3b9ca5 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 20 Jan 2021 13:01:49 -0500 Subject: [PATCH 042/129] Formatting --- src/components/ItemTableCell/ItemTableCell.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/ItemTableCell/ItemTableCell.js b/src/components/ItemTableCell/ItemTableCell.js index 5561bc7..15197ee 100644 --- a/src/components/ItemTableCell/ItemTableCell.js +++ b/src/components/ItemTableCell/ItemTableCell.js @@ -16,24 +16,24 @@ export default function ItemTableCell({ reactTableCellProps, backgroundColor, ch const classes = useStyles(); return ( - + {children} ); } ItemTableCell.propTypes = { - /** Props passed from ItemTable. */ - "reactTableProps": PropTypes.object, - /** Sets background color*/ - "backgroundColor": PropTypes.string, - /** Child object passed to display cell data. */ - "children": PropTypes.object, + /** Props passed from ItemTable. */ + "reactTableProps": PropTypes.object, + /** Sets background color*/ + "backgroundColor": PropTypes.string, + /** Child object passed to display cell data. */ + "children": PropTypes.object, }; ItemTableCell.defaultProps = { - "reactTableProps": {}, - "backgroundColor": "", - "children": {}, + "reactTableProps": {}, + "backgroundColor": "", + "children": {}, }; \ No newline at end of file From 55de97334b4200af76fb68bfe35d257de8c927e1 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 20 Jan 2021 15:07:01 -0500 Subject: [PATCH 043/129] Rename reactTableProps to TableCellProps --- src/components/ItemTable/ItemTable.js | 4 ++-- src/components/ItemTableCell/ItemTableCell.js | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index cb918f4..81f7475 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -145,7 +145,7 @@ export default function ItemTable({ data }) { switch (cell.column.id) { case "dateReceived": return ( - + ); @@ -158,7 +158,7 @@ export default function ItemTable({ data }) { ); default: return ( - + {cell.value} ); diff --git a/src/components/ItemTableCell/ItemTableCell.js b/src/components/ItemTableCell/ItemTableCell.js index 15197ee..c2c906a 100644 --- a/src/components/ItemTableCell/ItemTableCell.js +++ b/src/components/ItemTableCell/ItemTableCell.js @@ -2,12 +2,11 @@ import React from 'react' import PropTypes from "prop-types"; import { makeStyles, TableCell, useTheme } from '@material-ui/core' -export default function ItemTableCell({ reactTableCellProps, backgroundColor, children }) { - +export default function ItemTableCell({ backgroundColor, children, TableCellProps }) { const theme = useTheme(); - const useStyles = makeStyles({ columnBorders: { + // Add column borders borderLeftWidth: "1px", borderLeftStyle: "solid", borderColor: theme.palette.type === "light" ? theme.palette.grey[300] : theme.palette.grey[500] @@ -16,19 +15,23 @@ export default function ItemTableCell({ reactTableCellProps, backgroundColor, ch const classes = useStyles(); return ( - + {children} ); } ItemTableCell.propTypes = { - /** Props passed from ItemTable. */ - "reactTableProps": PropTypes.object, /** Sets background color*/ "backgroundColor": PropTypes.string, /** Child object passed to display cell data. */ "children": PropTypes.object, + /** Props applied to the TableCell component. */ + "TableCellProps": PropTypes.object }; From fc608a6ea2df1af0f05b6cf345446a8ed4425345 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 20 Jan 2021 15:11:33 -0500 Subject: [PATCH 044/129] Renamed folder and update exports --- src/components/ItemTable/ItemTable.js | 2 +- src/components/LastUpdatedCell.js/index.js | 3 --- .../{LastUpdatedCell.js => LastUpdatedCell}/LastUpdatedCell.js | 0 .../{LastUpdatedCell.js => LastUpdatedCell}/LastUpdatedCell.md | 0 src/components/LastUpdatedCell/index.js | 3 +++ 5 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 src/components/LastUpdatedCell.js/index.js rename src/components/{LastUpdatedCell.js => LastUpdatedCell}/LastUpdatedCell.js (100%) rename src/components/{LastUpdatedCell.js => LastUpdatedCell}/LastUpdatedCell.md (100%) create mode 100644 src/components/LastUpdatedCell/index.js diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 81f7475..6df2fdd 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -7,7 +7,7 @@ import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; import ItemTableCell from "../ItemTableCell"; -import LastUpdatedCell from "../LastUpdatedCell.js/LastUpdatedCell"; +import LastUpdatedCell from "../LastUpdatedCell/"; export default function ItemTable({ data }) { const [selectedRow, setSelecetedRow] = useState({ queue: null, number: null }); diff --git a/src/components/LastUpdatedCell.js/index.js b/src/components/LastUpdatedCell.js/index.js deleted file mode 100644 index 42d1ac9..0000000 --- a/src/components/LastUpdatedCell.js/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import LastUpdatedCell from "./ItemTableCell"; - -export default LastUpdatedCell; \ No newline at end of file diff --git a/src/components/LastUpdatedCell.js/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js similarity index 100% rename from src/components/LastUpdatedCell.js/LastUpdatedCell.js rename to src/components/LastUpdatedCell/LastUpdatedCell.js diff --git a/src/components/LastUpdatedCell.js/LastUpdatedCell.md b/src/components/LastUpdatedCell/LastUpdatedCell.md similarity index 100% rename from src/components/LastUpdatedCell.js/LastUpdatedCell.md rename to src/components/LastUpdatedCell/LastUpdatedCell.md diff --git a/src/components/LastUpdatedCell/index.js b/src/components/LastUpdatedCell/index.js new file mode 100644 index 0000000..35380d3 --- /dev/null +++ b/src/components/LastUpdatedCell/index.js @@ -0,0 +1,3 @@ +import LastUpdatedCell from "./LastUpdatedCell"; + +export default LastUpdatedCell; \ No newline at end of file From 0c3f1bbf1d5888df058f990a128bc41874c8344b Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 20 Jan 2021 15:12:36 -0500 Subject: [PATCH 045/129] Formatting --- .../LastUpdatedCell/LastUpdatedCell.js | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js index 48e0c7e..8ffc778 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell/LastUpdatedCell.js @@ -4,51 +4,51 @@ import { red } from '@material-ui/core/colors'; import RelativeTime from 'react-relative-time'; import ItemTableCell from '../ItemTableCell'; -export default function LastUpdatedCell ({ time, reactTableCellProps, classes }){ - const lastUpdated = new Date(time).getTime(); - const now = new Date().getTime(); - const timeDelta = now - lastUpdated; - const day = 24 * 60 * 60 * 1000; - const week = day * 7; - const month = week * 4; +export default function LastUpdatedCell({ time, reactTableCellProps, classes }) { + const lastUpdated = new Date(time).getTime(); + const now = new Date().getTime(); + const timeDelta = now - lastUpdated; + const day = 24 * 60 * 60 * 1000; + const week = day * 7; + const month = week * 4; - let backgroundColor = "white"; - if (timeDelta > day && timeDelta <= week) { - backgroundColor = red[100] - } - else if (timeDelta > week && timeDelta <= month) { - backgroundColor = red[300] - } - else if (timeDelta > month) { - backgroundColor = red[500] - } + let backgroundColor = "white"; + if (timeDelta > day && timeDelta <= week) { + backgroundColor = red[100] + } + else if (timeDelta > week && timeDelta <= month) { + backgroundColor = red[300] + } + else if (timeDelta > month) { + backgroundColor = red[500] + } - return ( - - - - ); + return ( + + + + ); } LastUpdatedCell.propTypes = { - /** Time value in ISO8601. */ - "time": PropTypes.string, - /** Props passed from ItemTable. */ - "reactTableProps": PropTypes.object, - /**Object that passes classes to the component. */ - "classes": PropTypes.object, + /** Time value in ISO8601. */ + "time": PropTypes.string, + /** Props passed from ItemTable. */ + "reactTableProps": PropTypes.object, + /**Object that passes classes to the component. */ + "classes": PropTypes.object, }; LastUpdatedCell.defaultProps = { - "time": "", - "reactTableProps": {}, - "classes": {}, + "time": "", + "reactTableProps": {}, + "classes": {}, }; \ No newline at end of file From 813438a4d5f8521d3fa9a39d412f580665a7dc86 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 20 Jan 2021 21:17:07 -0500 Subject: [PATCH 046/129] Remove unused backgroundColor prop --- src/components/ItemTableCell/ItemTableCell.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/components/ItemTableCell/ItemTableCell.js b/src/components/ItemTableCell/ItemTableCell.js index c2c906a..cf13a74 100644 --- a/src/components/ItemTableCell/ItemTableCell.js +++ b/src/components/ItemTableCell/ItemTableCell.js @@ -2,7 +2,7 @@ import React from 'react' import PropTypes from "prop-types"; import { makeStyles, TableCell, useTheme } from '@material-ui/core' -export default function ItemTableCell({ backgroundColor, children, TableCellProps }) { +export default function ItemTableCell({ children, TableCellProps }) { const theme = useTheme(); const useStyles = makeStyles({ columnBorders: { @@ -16,7 +16,6 @@ export default function ItemTableCell({ backgroundColor, children, TableCellProp const classes = useStyles(); return ( @@ -26,17 +25,13 @@ export default function ItemTableCell({ backgroundColor, children, TableCellProp } ItemTableCell.propTypes = { - /** Sets background color*/ - "backgroundColor": PropTypes.string, /** Child object passed to display cell data. */ "children": PropTypes.object, /** Props applied to the TableCell component. */ "TableCellProps": PropTypes.object - }; ItemTableCell.defaultProps = { - "reactTableProps": {}, - "backgroundColor": "", "children": {}, + "TableCellProps": {}, }; \ No newline at end of file From 672b0f9101514c0196f0cefd547baac208b75350 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 21 Jan 2021 11:55:40 -0500 Subject: [PATCH 047/129] Refactir timeToBackgroundColor and inject background color into props --- .../LastUpdatedCell/LastUpdatedCell.js | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js index 8ffc778..9bce6b4 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell/LastUpdatedCell.js @@ -4,51 +4,67 @@ import { red } from '@material-ui/core/colors'; import RelativeTime from 'react-relative-time'; import ItemTableCell from '../ItemTableCell'; -export default function LastUpdatedCell({ time, reactTableCellProps, classes }) { +/** + * Returns a color showing how old an item is. + * @param {string} time ISO 8601 formatted time string. + * @example + * // Returns "#e57373" + * timeToBackgroundColor("2021-01-04T11:47:00-0500") + * @returns {string} Hex color code. + */ +const timeToBackgroundColor = (time) => { const lastUpdated = new Date(time).getTime(); const now = new Date().getTime(); const timeDelta = now - lastUpdated; + const day = 24 * 60 * 60 * 1000; const week = day * 7; const month = week * 4; let backgroundColor = "white"; + + // 1-6 days old if (timeDelta > day && timeDelta <= week) { - backgroundColor = red[100] + backgroundColor = red[100]; } + // 7-28 days old else if (timeDelta > week && timeDelta <= month) { - backgroundColor = red[300] + backgroundColor = red[300]; } + // 29+ days old else if (timeDelta > month) { - backgroundColor = red[500] + backgroundColor = red[500]; } + return backgroundColor; +} + +export default function LastUpdatedCell({ time, reactTableCellProps }) { + // Insert the calculated background color into props so it isn't overriden. + // Inspired by: https://github.com/mui-org/material-ui/issues/19479 + reactTableCellProps = { + ...reactTableCellProps, + style: { + ...reactTableCellProps.style, + backgroundColor: timeToBackgroundColor(time) + } + }; + return ( - + ); -} +}; LastUpdatedCell.propTypes = { /** Time value in ISO8601. */ "time": PropTypes.string, /** Props passed from ItemTable. */ "reactTableProps": PropTypes.object, - /**Object that passes classes to the component. */ - "classes": PropTypes.object, - }; LastUpdatedCell.defaultProps = { "time": "", "reactTableProps": {}, - "classes": {}, }; \ No newline at end of file From 86b75a1a980118e875ba27a118f5f74ff344ad57 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 21 Jan 2021 12:01:25 -0500 Subject: [PATCH 048/129] Rename reactTableProps to ItemTableCellProps --- src/components/ItemTable/ItemTable.js | 2 +- .../LastUpdatedCell/LastUpdatedCell.js | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 6df2fdd..f05fc5f 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -153,7 +153,7 @@ export default function ItemTable({ data }) { return ( ); default: diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js index 9bce6b4..6fbbc81 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell/LastUpdatedCell.js @@ -39,32 +39,32 @@ const timeToBackgroundColor = (time) => { return backgroundColor; } -export default function LastUpdatedCell({ time, reactTableCellProps }) { +export default function LastUpdatedCell({ time, ItemTableCellProps }) { // Insert the calculated background color into props so it isn't overriden. // Inspired by: https://github.com/mui-org/material-ui/issues/19479 - reactTableCellProps = { - ...reactTableCellProps, + ItemTableCellProps = { + ...ItemTableCellProps, style: { - ...reactTableCellProps.style, + ...ItemTableCellProps.style, backgroundColor: timeToBackgroundColor(time) } }; return ( - + ); }; LastUpdatedCell.propTypes = { - /** Time value in ISO8601. */ + /** ISO 8601 formatted time string. */ "time": PropTypes.string, - /** Props passed from ItemTable. */ - "reactTableProps": PropTypes.object, + /** Props to be applied to the ItemTableCell. */ + "ItemTableCellProps": PropTypes.object, }; LastUpdatedCell.defaultProps = { "time": "", - "reactTableProps": {}, + "ItemTableCellProps": {}, }; \ No newline at end of file From e3724defce7d3c3f62f239fc2673160d02343a7a Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 21 Jan 2021 13:14:07 -0500 Subject: [PATCH 049/129] Make time prop required --- src/components/LastUpdatedCell/LastUpdatedCell.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js index 6fbbc81..735461a 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell/LastUpdatedCell.js @@ -59,12 +59,11 @@ export default function LastUpdatedCell({ time, ItemTableCellProps }) { LastUpdatedCell.propTypes = { /** ISO 8601 formatted time string. */ - "time": PropTypes.string, + "time": PropTypes.string.isRequired, /** Props to be applied to the ItemTableCell. */ "ItemTableCellProps": PropTypes.object, }; LastUpdatedCell.defaultProps = { - "time": "", "ItemTableCellProps": {}, }; \ No newline at end of file From 9df197ef9d144760ebb0eb48fee8cca070db8469 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 21 Jan 2021 13:14:14 -0500 Subject: [PATCH 050/129] Add docs --- src/components/ItemTableCell/ItemTableCell.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/components/ItemTableCell/ItemTableCell.md b/src/components/ItemTableCell/ItemTableCell.md index e69de29..5a3bcea 100644 --- a/src/components/ItemTableCell/ItemTableCell.md +++ b/src/components/ItemTableCell/ItemTableCell.md @@ -0,0 +1,38 @@ +The ItemTableCell wraps an [MUI TableCell](https://material-ui.com/api/table-cell/) and adds styling. + +## Default Usage +```jsx +import { Paper } from '@material-ui/core'; +import ItemTableCell from "./ItemTableCell"; + + + + Hello, moto! + + +``` + +```jsx static + + + Hello, moto! + + +``` + +## Forwarded TableCell Props +Props can be passed to the TableCell component using the TableCellProps prop. +```jsx +import { Paper } from '@material-ui/core'; +import ItemTableCell from "./ItemTableCell"; + + + Hello, moto! + +``` + +```jsx static + + Hello, moto! + +``` \ No newline at end of file From 246e4d98daa7801f2e8f7d5325dfb036736fc9df Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 21 Jan 2021 13:14:19 -0500 Subject: [PATCH 051/129] Add docs --- .../LastUpdatedCell/LastUpdatedCell.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.md b/src/components/LastUpdatedCell/LastUpdatedCell.md index e69de29..a0b202e 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.md +++ b/src/components/LastUpdatedCell/LastUpdatedCell.md @@ -0,0 +1,36 @@ +The LastUpdatedCell wraps an [ItemTableCell](/#/Components/ItemTableCell) and changes its background color based on the time passed to it to indicate how old an item is. + +## Default Usage +```jsx +import { Paper } from '@material-ui/core'; +import LastUpdatedCell from "./LastUpdatedCell"; + +let today = new Date(); +let threeDaysAgo = new Date().setDate(today.getDate() - 3); +let lastWeek = new Date().setDate(today.getDate() - 8); +let lastMonth = new Date().setDate(today.getDate() - 28); + + + { /* Today */ } + + { /* Three Days Ago */ } + + { /* Last Week */ } + + { /* Last Month */ } + + +``` + +```jsx static + + { /* Today */ } + + { /* Three Days Ago */ } + + { /* Last Week */ } + + { /* Last Month */ } + + +``` \ No newline at end of file From 1ed9daa263f773a277fcc4c0077ec3105103378d Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 21 Jan 2021 13:18:22 -0500 Subject: [PATCH 052/129] Update docs to show what values the time prop can be --- src/components/LastUpdatedCell/LastUpdatedCell.js | 2 +- src/components/LastUpdatedCell/LastUpdatedCell.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js index 735461a..6729508 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell/LastUpdatedCell.js @@ -58,7 +58,7 @@ export default function LastUpdatedCell({ time, ItemTableCellProps }) { }; LastUpdatedCell.propTypes = { - /** ISO 8601 formatted time string. */ + /** ISO 8601 formatted time string, Date object or UNIX time. See: https://www.npmjs.com/package/react-relative-time */ "time": PropTypes.string.isRequired, /** Props to be applied to the ItemTableCell. */ "ItemTableCellProps": PropTypes.object, diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.md b/src/components/LastUpdatedCell/LastUpdatedCell.md index a0b202e..ce823a5 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.md +++ b/src/components/LastUpdatedCell/LastUpdatedCell.md @@ -1,4 +1,6 @@ -The LastUpdatedCell wraps an [ItemTableCell](/#/Components/ItemTableCell) and changes its background color based on the time passed to it to indicate how old an item is. +A table cell that takes a time value and returns a relative time with a background color to indicate how old an item is. + +The LastUpdatedCell wraps an [ItemTableCell](/#/Components/ItemTableCell) ## Default Usage ```jsx From 3eabe11051c0540c878e09237202a291e745db48 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 22 Jan 2021 00:46:06 -0500 Subject: [PATCH 053/129] Fix for dark mode background toggle --- .../LastUpdatedCell/LastUpdatedCell.js | 66 ++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/src/components/LastUpdatedCell/LastUpdatedCell.js b/src/components/LastUpdatedCell/LastUpdatedCell.js index 6729508..82221fc 100644 --- a/src/components/LastUpdatedCell/LastUpdatedCell.js +++ b/src/components/LastUpdatedCell/LastUpdatedCell.js @@ -1,45 +1,49 @@ import React from 'react' import PropTypes from "prop-types"; +import { useTheme } from '@material-ui/core'; import { red } from '@material-ui/core/colors'; import RelativeTime from 'react-relative-time'; import ItemTableCell from '../ItemTableCell'; -/** - * Returns a color showing how old an item is. - * @param {string} time ISO 8601 formatted time string. - * @example - * // Returns "#e57373" - * timeToBackgroundColor("2021-01-04T11:47:00-0500") - * @returns {string} Hex color code. - */ -const timeToBackgroundColor = (time) => { - const lastUpdated = new Date(time).getTime(); - const now = new Date().getTime(); - const timeDelta = now - lastUpdated; +export default function LastUpdatedCell({ time, ItemTableCellProps }) { - const day = 24 * 60 * 60 * 1000; - const week = day * 7; - const month = week * 4; + const theme = useTheme(); - let backgroundColor = "white"; + /** + * Returns a color showing how old an item is. + * @param {string} time ISO 8601 formatted time string. + * @example + * // Returns "#e57373" + * timeToBackgroundColor("2021-01-04T11:47:00-0500") + * @returns {string} Hex color code. + */ + const timeToBackgroundColor = (time) => { + const lastUpdated = new Date(time).getTime(); + const now = new Date().getTime(); + const timeDelta = now - lastUpdated; - // 1-6 days old - if (timeDelta > day && timeDelta <= week) { - backgroundColor = red[100]; - } - // 7-28 days old - else if (timeDelta > week && timeDelta <= month) { - backgroundColor = red[300]; - } - // 29+ days old - else if (timeDelta > month) { - backgroundColor = red[500]; - } + const day = 24 * 60 * 60 * 1000; + const week = day * 7; + const month = week * 4; - return backgroundColor; -} + let backgroundColor = theme.palette.background.paper; + + // 1-6 days old + if (timeDelta > day && timeDelta <= week) { + backgroundColor = red[100]; + } + // 7-28 days old + else if (timeDelta > week && timeDelta <= month) { + backgroundColor = red[300]; + } + // 29+ days old + else if (timeDelta > month) { + backgroundColor = red[500]; + } + + return backgroundColor; + } -export default function LastUpdatedCell({ time, ItemTableCellProps }) { // Insert the calculated background color into props so it isn't overriden. // Inspired by: https://github.com/mui-org/material-ui/issues/19479 ItemTableCellProps = { From 4936578851c08ee50831635bdae19d15115e42e4 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 30 Dec 2020 15:13:54 -0500 Subject: [PATCH 054/129] Update Python requirements to fix Flask_JWT_Extended and PyJWT conflict (cherry picked from commit 2bd362cc29bd93d07050a86210a2827ff3aa245f) --- api/requirements.txt | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/api/requirements.txt b/api/requirements.txt index 1aaa908..d87bdac 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,22 +1,14 @@ -aniso8601==8.0.0 -astroid==2.4.2 -click==7.1.2 -Flask==1.1.2 -Flask-RESTful==0.3.8 -Flask-JWT-Extended==3.24.1 -gunicorn==20.0.4 -isort==4.3.21 -itsdangerous==1.1.0 -Jinja2==2.11.2 -lazy-object-proxy==1.4.3 -MarkupSafe==1.1.1 -mccabe==0.6.1 -pylint==2.5.3 -python-dateutil==2.8.1 -python-dotenv==0.15.0 -pytz==2020.1 -six==1.15.0 -toml==0.10.1 -typed-ast==1.4.1 -Werkzeug==1.0.1 -wrapt==1.12.1 +# See: https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file + +# General Utilities +gunicorn +pipdeptree +pylint + +# API +python-dotenv +Flask-RESTful +python-dateutil +Flask-JWT-Extended +# Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it +PyJWT == 1.* \ No newline at end of file From 49106215a8a85a19acc4b3fc4fa11d264c22b1c5 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 30 Dec 2020 17:14:23 -0500 Subject: [PATCH 055/129] Update venv-manager to allow 60 second for requirement installation (cherry picked from commit 5dd1da95824946384fa097c7040c6c7d83943151) --- utils/venv-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 72ecd3b..3bb15ce 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -79,7 +79,7 @@ def get_args() -> argparse.Namespace: return parser.parse_args() -def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: bool = True) -> tuple: +def run_logged_subprocess(command: Union[str, list], timeout: int = 60, shell: bool = True) -> tuple: """Executes a shell command using subprocess with logging. stderr is redirected to stdout and stdout is pipped to logger. @@ -96,7 +96,7 @@ def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: b Args: command (Union): The command to run. If shell=False, pass a list with the first item being the command and the subsequent items being arguments. If shell=True, pass a string as you would type it into a shell. - timeout (int): The number of seconds to wait for a program before killing it + timeout (int): The number of seconds to wait for a program before killing it. Defaults to 60. Returns: tuple: With the first value being the return code and second being the combined stdout+stderr From a6476393fafe991b166cdb003f52790a3faca767 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 22 Jan 2021 18:46:29 +0000 Subject: [PATCH 056/129] Add EasyAD to project requirements --- api/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/requirements.txt b/api/requirements.txt index d87bdac..e6bfde6 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -11,4 +11,5 @@ Flask-RESTful python-dateutil Flask-JWT-Extended # Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it -PyJWT == 1.* \ No newline at end of file +PyJWT == 1.* +easyad \ No newline at end of file From 75e8cd480787f90d914a3542a972ecceddde8bcb Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 22 Jan 2021 19:07:18 +0000 Subject: [PATCH 057/129] Replace shared username/password with AD auth --- api/api.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/api/api.py b/api/api.py index 0cbd771..997e0f9 100644 --- a/api/api.py +++ b/api/api.py @@ -7,6 +7,9 @@ ) from werkzeug.security import check_password_hash import os, dotenv +from easyad import EasyAD +from ldap.filter import escape_filter_chars +from ldap import INVALID_CREDENTIALS as LDAP_INVALID_CREDENTIALS import ECNQueue # Load envrionment variables for ./.env @@ -47,6 +50,58 @@ +def user_is_valid(username: str, password: str) -> bool: + """Checks if user is valid and in webqueue2 login group. + + Args: + username (str): Career account username. + password (str): Career account passphrase. + + Returns: + bool: True if user is valid, otherwise False. + """ + + # Check for empty arguments + if (username == "" or password == ""): + return False + + # Initialize EasyAD + config = { + "AD_SERVER": "boilerad.purdue.edu", + "AD_DOMAIN": "boilerad.purdue.edu" + } + ad = EasyAD(config) + + # Prepare search critiera for Active Directory + credentials = { + "username": escape_filter_chars(username), + "password": password + } + attributes = [ 'cn', "memberOf" ] + filter_string = f'(&(objectClass=user)(|(sAMAccountName={username})))' + + # Do user search + try: + user = ad.search(credentials=credentials, attributes=attributes, filter_string=filter_string)[0] + # pylint says this is an error but it works so ¯\_(ツ)_/¯ + except LDAP_INVALID_CREDENTIALS: + return False + + # Isolate group names + # Example: + # 'CN=00000227-ECNStuds,OU=BoilerADGroups,DC=BoilerAD,DC=Purdue,DC=edu' becomes + # `00000227-ECNStuds` + user_groups = [ group.split(',')[0].split('=')[1] for group in user["memberOf"] ] + + # Check group membership + webqueue_login_group = "00000227-ECN-webqueue" + if webqueue_login_group not in user_groups: + return False + + return True + + + class Login(Resource): def post(self) -> tuple: """Validates username/password and returns both access and refresh tokens. @@ -76,10 +131,8 @@ def post(self) -> tuple: if field not in data.keys(): return ({ "message": f"{field} missing from request body"}, 422) - if data["username"] != os.environ.get("SHARED_USERNAME"): - return ({ "message": "Username invalid"}, 401) - if not check_password_hash(os.environ.get("SHARED_PASSWORD_HASH"), data["password"]): - return ({ "message": "Password invalid"}, 401) + if not user_is_valid(data["username"], data["password"]): + return ({ "message": "Username or password is invalid"}, 401) access_token = create_access_token(data["username"]) refresh_token = create_refresh_token(data["username"]) From e0686231fc01f7d7c7fc3db2b5fb9ee6c20c97a8 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 22 Jan 2021 19:10:05 +0000 Subject: [PATCH 058/129] Update comments --- api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/api.py b/api/api.py index 997e0f9..65e911f 100644 --- a/api/api.py +++ b/api/api.py @@ -9,6 +9,7 @@ import os, dotenv from easyad import EasyAD from ldap.filter import escape_filter_chars +# pylint says this is an error but it works so ¯\_(ツ)_/¯ from ldap import INVALID_CREDENTIALS as LDAP_INVALID_CREDENTIALS import ECNQueue @@ -83,7 +84,6 @@ def user_is_valid(username: str, password: str) -> bool: # Do user search try: user = ad.search(credentials=credentials, attributes=attributes, filter_string=filter_string)[0] - # pylint says this is an error but it works so ¯\_(ツ)_/¯ except LDAP_INVALID_CREDENTIALS: return False From 7ec22d687b6f06390069ee71b38051cbe9159825 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 27 Jan 2021 14:33:03 -0500 Subject: [PATCH 059/129] Update venv-manager to allow 60 second for requirement installation (cherry picked from commit 49106215a8a85a19acc4b3fc4fa11d264c22b1c5) --- utils/venv-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 72ecd3b..3bb15ce 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -79,7 +79,7 @@ def get_args() -> argparse.Namespace: return parser.parse_args() -def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: bool = True) -> tuple: +def run_logged_subprocess(command: Union[str, list], timeout: int = 60, shell: bool = True) -> tuple: """Executes a shell command using subprocess with logging. stderr is redirected to stdout and stdout is pipped to logger. @@ -96,7 +96,7 @@ def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: b Args: command (Union): The command to run. If shell=False, pass a list with the first item being the command and the subsequent items being arguments. If shell=True, pass a string as you would type it into a shell. - timeout (int): The number of seconds to wait for a program before killing it + timeout (int): The number of seconds to wait for a program before killing it. Defaults to 60. Returns: tuple: With the first value being the return code and second being the combined stdout+stderr From 8201b54195069cb92d1519eb484eff4f4665a5b3 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 27 Jan 2021 14:36:34 -0500 Subject: [PATCH 060/129] Remove egg-info files for Python module installation and add to gitignore --- .gitignore | 3 ++- api/webqueueapi.egg-info/PKG-INFO | 10 ---------- api/webqueueapi.egg-info/SOURCES.txt | 6 ------ api/webqueueapi.egg-info/dependency_links.txt | 1 - api/webqueueapi.egg-info/top_level.txt | 2 -- 5 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 api/webqueueapi.egg-info/PKG-INFO delete mode 100644 api/webqueueapi.egg-info/SOURCES.txt delete mode 100644 api/webqueueapi.egg-info/dependency_links.txt delete mode 100644 api/webqueueapi.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index e238c91..d8b16ea 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ yarn-error.log* /api/venv __pycache__/ venv-manager.log -/api/.env \ No newline at end of file +/api/.env +api/webqueueapi.egg-info \ No newline at end of file diff --git a/api/webqueueapi.egg-info/PKG-INFO b/api/webqueueapi.egg-info/PKG-INFO deleted file mode 100644 index d92f4ac..0000000 --- a/api/webqueueapi.egg-info/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 1.0 -Name: webqueueapi -Version: 1.0 -Summary: UNKNOWN -Home-page: UNKNOWN -Author: UNKNOWN -Author-email: UNKNOWN -License: UNKNOWN -Description: UNKNOWN -Platform: UNKNOWN diff --git a/api/webqueueapi.egg-info/SOURCES.txt b/api/webqueueapi.egg-info/SOURCES.txt deleted file mode 100644 index 2f0f7ee..0000000 --- a/api/webqueueapi.egg-info/SOURCES.txt +++ /dev/null @@ -1,6 +0,0 @@ -api.py -setup.py -webqueueapi.egg-info/PKG-INFO -webqueueapi.egg-info/SOURCES.txt -webqueueapi.egg-info/dependency_links.txt -webqueueapi.egg-info/top_level.txt \ No newline at end of file diff --git a/api/webqueueapi.egg-info/dependency_links.txt b/api/webqueueapi.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/api/webqueueapi.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/api/webqueueapi.egg-info/top_level.txt b/api/webqueueapi.egg-info/top_level.txt deleted file mode 100644 index 7cc9ebf..0000000 --- a/api/webqueueapi.egg-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -ECNqueue -api From 3b5399d9513a4f818f1ad21b7cd5447dcc4d00a3 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 27 Jan 2021 14:37:02 -0500 Subject: [PATCH 061/129] Fix ignore for egg-info --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d8b16ea..184e9b6 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,4 @@ yarn-error.log* __pycache__/ venv-manager.log /api/.env -api/webqueueapi.egg-info \ No newline at end of file +/api/webqueueapi.egg-info \ No newline at end of file From f5b4b1e9f9c8a1aec8a2265cef3afbc063605f09 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 27 Jan 2021 14:50:13 -0500 Subject: [PATCH 062/129] Update comments --- api/ECNQueue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index c304c86..88173c8 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1332,7 +1332,7 @@ def getQueueCounts() -> list: validItems = [isValidItemName for file in possibleItems] queueInfo.append( {"name": queue, "number_of_items": len(validItems)} ) - # Sorts queueinfo alphabetically using the lambda function + # Sorts list of queue info alphabetically sortedQueueInfo = sorted(queueInfo, key = lambda queueInfoList: queueInfoList['name']) return sortedQueueInfo From 02ab227ecabd90cdd7e54a633e10023979152550 Mon Sep 17 00:00:00 2001 From: benne238 Date: Wed, 27 Jan 2021 21:04:33 -0500 Subject: [PATCH 063/129] fix for accounting for empty content in messages --- api/ECNQueue.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index b0e1fd6..de18df3 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -51,7 +51,7 @@ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") - +queueDirectory = "/home/pier/e/benne238/personalQueues" # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -264,7 +264,7 @@ def __parseSections(self) -> list: sections.append(assignment) # Checks for empty content within an item and returns and - if contentEnd == contentStart: + if contentEnd <= contentStart: blankInitialMessage = self.__initialMessageParsing([""]) sections.append(blankInitialMessage) return sections @@ -1351,4 +1351,8 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues \ No newline at end of file + return queues + +if __name__ == "__main__": + item = Item("aae", 55) + print() \ No newline at end of file From d9942b91ddd3775fbedce7f89c9a1f59fbc82265 Mon Sep 17 00:00:00 2001 From: benne238 Date: Wed, 27 Jan 2021 21:05:25 -0500 Subject: [PATCH 064/129] removal of debugging lines --- api/ECNQueue.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index de18df3..789cc26 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -51,7 +51,7 @@ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") -queueDirectory = "/home/pier/e/benne238/personalQueues" + # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -1351,8 +1351,4 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues - -if __name__ == "__main__": - item = Item("aae", 55) - print() \ No newline at end of file + return queues \ No newline at end of file From 25b33a6e2a81fff61c123f5949811449c4ea9226 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 28 Jan 2021 12:36:01 -0500 Subject: [PATCH 065/129] Update comments, change minor formatting --- utils/venv-manager.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 3bb15ce..6209901 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -36,21 +36,24 @@ logger = logging.getLogger(logger_name) logger.setLevel(logging.DEBUG) -# See: https://docs.python.org/3/library/logging.html#logrecord-attributes +# See Formatting Details: https://docs.python.org/3/library/logging.html#logrecord-attributes +# Example: Jan 28 2021 12:19:28 venv-manager : [INFO] Message log_message_format = "%(asctime)s %(name)s : [%(levelname)s] %(message)s" -# See: https://docs.python.org/3.6/library/time.html#time.strftime +# See Time Formatting Details: https://docs.python.org/3.6/library/time.html#time.strftime +# Example: Jan 28 2021 12:19:28 log_time_format = "%b %d %Y %H:%M:%S" log_formatter = logging.Formatter(log_message_format, log_time_format) +# Configure output to stdout stream_handler = logging.StreamHandler() stream_handler.setFormatter(log_formatter) stream_handler.setLevel(logging.INFO) +logger.addHandler(stream_handler) +# Configure out to logfile log_file_path = Path(WEBQUEUE2_DIR, "utils", f'{logger_name}.log') file_handler = logging.FileHandler(log_file_path) file_handler.setFormatter(log_formatter) - -logger.addHandler(stream_handler) logger.addHandler(file_handler) @@ -210,6 +213,7 @@ def delete_environment() -> int: logger.critical(f"Failed to delete virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") return 5 + def reset_environment() -> int: """Resets a virtual environment for webqueue2 From 7535510380007fd7bd455269a2a37e2cda6f4822 Mon Sep 17 00:00:00 2001 From: benne238 Date: Sun, 31 Jan 2021 17:27:14 -0500 Subject: [PATCH 066/129] Squashed commit of the following: commit d9942b91ddd3775fbedce7f89c9a1f59fbc82265 Author: benne238 Date: Wed Jan 27 21:05:25 2021 -0500 removal of debugging lines commit 02ab227ecabd90cdd7e54a633e10023979152550 Author: benne238 Date: Wed Jan 27 21:04:33 2021 -0500 fix for accounting for empty content in messages commit 610bc867b3b126481ae54da79b87069dd7ae7add Author: benne238 Date: Tue Jan 12 15:23:52 2021 -0500 removal of queueDirectory testing code commit 30d9cfedb712f1e2b32b272a18d029b13b79a692 Author: benne238 Date: Mon Jan 11 14:30:01 2021 -0500 implementation of blank content handling commit 2bd362cc29bd93d07050a86210a2827ff3aa245f Author: Justin Campbell Date: Wed Dec 30 15:13:54 2020 -0500 Update Python requirements to fix Flask_JWT_Extended and PyJWT conflict commit 38445fe17a21e7c549f819a8c8e1ba784bc6a215 Merge: 0fd6f0a c20b9b8 Author: Campbell, Justin Date: Tue Dec 15 21:55:33 2020 -0500 Merge pull request #154 from ECN/enhancement-persistent-filters-and-sorting Enhancement persistent filters and sorting commit c20b9b870a3f5ea55cbf5dda1b60cc521e19bf59 Author: Justin Campbell Date: Tue Dec 15 21:54:39 2020 -0500 Minor formatting commit 2cccad286e1ac62907cb61815e08f95a0c08130a Author: Tyler Jordan Wright Date: Fri Dec 11 13:09:17 2020 -0500 Set autoResetFilters to false in order to stop filters from resetting on data change. commit d842e2c0110451fb99ad23cd672509cd1b2a6a73 Author: Tyler Jordan Wright Date: Wed Dec 9 11:08:19 2020 -0500 disabled autoResetSortBy to allow for sorting to persist when data changes. commit 0fd6f0a8ce4b99ca6fd135e5b2dd36e613783bbf Author: Justin Campbell Date: Thu Dec 3 20:13:58 2020 -0500 Update UI Snapshot --- README.md | 2 +- api/ECNQueue.py | 8 +++- api/requirements.txt | 36 +++++++----------- .../UI-Snapshot 2020-12-03 at 8.10.32 PM.png | Bin 0 -> 255424 bytes src/components/ItemTable/ItemTable.js | 8 ++-- 5 files changed, 27 insertions(+), 27 deletions(-) create mode 100644 docs/UI Snapshots/UI-Snapshot 2020-12-03 at 8.10.32 PM.png diff --git a/README.md b/README.md index 36e6329..0b31b4f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # webqueue2 A re-write of Purdue ECN's webqueue -![UI Snapshot](./docs/UI%20Snapshots/UI-Snapshot%202020-09-22%20at%201.48.58%20PM.png) +![UI Snapshot](./docs/UI%20Snapshots/UI-Snapshot%202020-12-03%20at%208.10.32%20PM.png) ## Stay Up To Date See what's being worked on with [the webqueue2 Project](https://github.itap.purdue.edu/ECN/webqueue2/projects/). diff --git a/api/ECNQueue.py b/api/ECNQueue.py index df564fe..8eb109c 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -263,6 +263,12 @@ def __parseSections(self) -> list: for assignment in assignementLsit: sections.append(assignment) + # Checks for empty content within an item and returns and + if contentEnd <= contentStart: + blankInitialMessage = self.__initialMessageParsing([""]) + sections.append(blankInitialMessage) + return sections + # Checks for Directory Identifiers if self.__rawItem[contentStart] == "\n" and self.__rawItem[contentStart + 1].startswith("\t"): @@ -1349,4 +1355,4 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues + return queues \ No newline at end of file diff --git a/api/requirements.txt b/api/requirements.txt index 1aaa908..d87bdac 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,22 +1,14 @@ -aniso8601==8.0.0 -astroid==2.4.2 -click==7.1.2 -Flask==1.1.2 -Flask-RESTful==0.3.8 -Flask-JWT-Extended==3.24.1 -gunicorn==20.0.4 -isort==4.3.21 -itsdangerous==1.1.0 -Jinja2==2.11.2 -lazy-object-proxy==1.4.3 -MarkupSafe==1.1.1 -mccabe==0.6.1 -pylint==2.5.3 -python-dateutil==2.8.1 -python-dotenv==0.15.0 -pytz==2020.1 -six==1.15.0 -toml==0.10.1 -typed-ast==1.4.1 -Werkzeug==1.0.1 -wrapt==1.12.1 +# See: https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file + +# General Utilities +gunicorn +pipdeptree +pylint + +# API +python-dotenv +Flask-RESTful +python-dateutil +Flask-JWT-Extended +# Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it +PyJWT == 1.* \ No newline at end of file diff --git a/docs/UI Snapshots/UI-Snapshot 2020-12-03 at 8.10.32 PM.png b/docs/UI Snapshots/UI-Snapshot 2020-12-03 at 8.10.32 PM.png new file mode 100644 index 0000000000000000000000000000000000000000..aa66e5d0abe752b9a3fd1326e322c91320e572e7 GIT binary patch literal 255424 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�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

qkG zt@S9%8!SsOSN7d%QIBfQ>@M_~8jscbZx~S<Ch#mI@J}>X5+sH?>rk991b|_%E)Z zOCaf}AFET&(ykM4!{25TMNuEJn|vBqk*Rq%n%5yuI+Xd-9qj5I0K2}DGQ2nxxgtj5s0SUN%3Oi#bG}l-LcdEW|~E{&-h3@9q+}GXZ)j%C>j3U#tt;K z*&8pyrK)*73BE5E_xE5_3uvW2o;>Pa7B>?xtsd68oFLGRa}T|xVRZ3QI} zHV6&lC#>G9{Kk~H3Y$@DcqYPgddcS$Fb%PMQshkr2Y)KfdAVMxJxJsAP- z$)<8ouYf#HG(qBCO&1Y`no=GNpv#&Wd znnn(iSSy~oO zoRZbDgB}r-Lmz^lBw0_le!6q|yd)^Tx;}LCTa?D=n1?E@4DY(4aQn*cT_jBECdEXe z_?H37C9BP$EHyez`nWgE(FDS^5O-H%FK1d+&DUZ}G?Rn!U9XY>Ck0JfZ?-_DgoQbm9=*d$V-lGZ7hG$H^t{BJ0;(}i4)W5G`86&aEb{pkmKZ25>p8l zrezVl=@Gls(E=^Ge5uVA}atJRt@1(*D!TCCguBY+U zM`1rD6X|TQ$E4rm$DtIh`i6QMzj$OhzAZ7nXl=j#*gGQ()f-O&ZqIFA=DUW&-6#^i zPf#^kU4Ch}Z?QCc(j)QMb;O|Axs~fy=<0_u>!=6gi7dK+bTmIpF=mRSEU+#fN?|1nDxX2>zQ!M>E=^0ov4mML#B&lVZNH~E%|~ojxgJG z&l$kO$d?voUrSRA{bIJ0naV8Xw!OA^*u-IqY>ZU+ii_ycdUMS;LH4)>&vdC)INO`!LhW7eodu}t|WkIdz4}5IS zAK!oVVos*(-4CHK=QHwl-lj>?Qu1g=qdZPs9t`AidEm#T6}@}XWxt1Se~K#ke9mYz zzgWJp;i|`EP|Ql%DZWjdlM%7KmA8I-WxNkq3uBfRFECe^VhIPop^@lb8E=@cXGmL; z77m6|V?Mwu!g*B|HIaea+N?{j+paePvYb(k$#ZT#q_{ice*|cp2<#G1|%*6Ge zebsNh^t90=gI~BHV1Z-vu9^DFS@OK2f?nIXhF#CS`|Tmak&dn!tPi|4s}d=m)?5e} zb}=(2EeiLhT-~%}^rt$hXd6gly_4j*wv3EGdG=!pKsNqXsZ*=Y-RMoR`i)bqV_MEV zI{wYOF(Tf*Iu&_Y;f}ac(Ug~5M2Dq1N1mRY3oN%g35B(lGe8t5u}Gbw{}Dc6W6_-+ zgGk8)@WuB^-Jy)kf=XTrugbG@8s@;mTO03=uq(=&ijD+aYivG_m9#b3F?&S%~wM7rCN28_>4)q*9PBQFGDe0*);Bhcd zX16BCKu)D8awQW3!f}d|n5-dts=ASc9hKfdsVlptimw#+I!_R@IO_27TpLBNW*oiP z;2FLKj-zE%wFJ+irOLZ>hqV}#g{2!}M#luKCWv+Q*wUs~_dmNG87O^mL@afEwkzD` zrTqJYlCHvaHGq84n`H;N`EhrwqSqZ>Fn_A%J^T!6MD@6Ify}(`seXDziU7>9OT5fm za#!VwvZdG?9&kzt@H-or$ckWe)K6HN7+93M9&TFYu|6-Mle7x?_*Y2Q9xWcXsCqUJ zxY~^`c=4>!5SZo4eGnDd$5uw=_~7KzOuiw{z8SAkz}xxDY0C<6m0>xsqF{Dt+iZ_Q z+4opE?TStinvi_V9V*Zda3XrSHMpj+_<_PHQ`kU6{&U#Vb0Pr^%N7O{QPpbW6!qwr zR6ZF8sNJ-)%Q)Dj4v$6Yy6mVKZ*M76$3>h7T`Pg?90kQ8d3x zDT6}M-b2BpUG$L(G5W>z)=eEx!QK$n)x=ePh{6*tQ(rDzeHL-Kl8_O#CO=s~A$S@o z7yEf(Qg1M6mUI&w)w=r9k?BICkQV#PCKUrmbXo?z?PF@@`4AfOQ{t8pBsgoko|?2# zwlNm0;e1Z^A9sei7oqG{US>6`tP*E*h0nt~A|E^m#Ud^!hA*l!*q`{BlC2OP#va)b zGy~8+j@7j1f%(K#dtyNNi#zlS2JH!W9dmDnVKSG;%NTFQqS`3OmD>(bH=lbW$#?@@ zm0Yw#tHOVd3~-GNASs4Z`kNHbvvV-T#{{%;@y%#gJeTi0eSx)Bg!I$GqhCsQ_czb_ zJ(>hnnfo|ATkm#F)c9(r*w$0?)miOtMmj}PWNAD^uUGVM5FH<)A-s{k=q=&GbKQ(Y zS{q;2eq-u^m$k1h?Q#9J^+>r+2D1wyECnx*o!Tz3rLNprsCXRV4+ zS}N2aNAV#p=Su*sjCISJfob%8=P9I+5*t~{wiT7Kw!bVjj<6AT2gywNb&#EG?p;2& zSjORW=EeNd{iaNlFY_Mh3co=)~DA@B>pY#2VgE zr$1UvmGtKG>8*@9L4nY_52aW87-qDXI6Z>s6+WvS(@8(3dS?Az&3i$vgKKW1ouF_s zDL+@!KybG2avz+h8C-#KnMgxHneXTV{cQoc3p<(O{QZijN?z(nxFon}`tWYt-E4l* zdL_@Or*-g*{PWv~i~-MU=VuDTF{%%wXIziraan)V2+pvd|9tP}!|VKS_x1f>szEVr z6UV1jX(sv=p`gSK?D$O0Itl%46Wm1kBFpIn#aCo8F%R0KTHlZo@8Mc~6+FJJaaF<9 zb%8jxsSC9vkE`^-?%N)ZsYFX6`3=HtOGUq=G)+BCu7O88HA?=sB%Tb#N`@q~=taq( zzsA?@Jg9o!1GJ(K8!jY`2g;Ohwbs1uo5-OL*$FKjnQIU%k{j^2qM+@!V2mzEEEH+R za$ZvmojB6r^tN+(B%n@EaDAQ3expZMBYMp@|7y?qD&veFxHfX0vM~eq_bVtyTO&P= z_a)qqvgLew1-+-FqN$H^*z}1|A38m5%LSE$i)1fHcFM%2*J)lcVDN`(kTkL#JRT-M zYRwDs(mo#~Tv86afgoJg;7oW`z2K_}HsyBJWmWGg~uUaJSrn)+NvVR<{B0nU(8$t4>(5RwpJkhIr%K3cm5w})a%OhU7h!` zp;|ahxn#u}wz{E1llfJWsUcXJY!l7l{F(cu>mEv{FnYx9SL_}A>=fk01FRN6h5E5M z1u3`}7-D1jfu`8s|5_8X%U5~jobyDeZbWUGULZn87NKV#EhIt{YFttf&aSrQJiLc* zdqFZVF=pCYwIG=#j2 z4>c{E>K)W8QO_TmP(R(h;Fzrc;7-ZDZyhM8eXn;=&rmkp>R8U-yyj8NWnd7rrqnEf-WMfrk zV1fc#Ue}l9&`#K;1RvMu3er#DGkp%@gVmZI6;6GHH(XkOKD|WV0f-Y%Tu7Q3(DBhd zLIN#o$?gX(fxUd8x92(;coxmFb`o=B&YUpU`;vC*E-`61N$NO-+n;2NCVT+dJi?Pc ziu?7FdkEaY^?UTq?Mc>QoiTOEkgK^@l#+$dczzMU>&dkE#QkY%b7q)hC{1uVYdCiM zO5VJqv2V7bYJvJJw{`Hg69AB}G`jLMnajuqH^$Q{o4A%c1A?}lK67)pyZ-^UAV!c` zQh;9*Ar;$^N|vZlKckEd3R7=sTwzx3{UlmZ;=dy&b?b48)#4y8{z%OBB|`KQq|9X? zAsxp$VUGC~M;iZe-!Y4u1}5fq3=R4M?xpg~^(H0DqLUO9mz3j5r_W1G_QK)q}$O3 zjqzP7USghG63v?QFT>>2EK$^_BtL2pH_pF|Wpv{d91D+AhGMVK#{lypzpwl@3;p7u z@*O&zfyZ2+#B4D=6NsTiOdjY{1{E~_%cEcBryE)=96!Fl$uLd&C_;$d{X1#sNACAM zBoHX2c{lX>tZJ5%r%zqOIM$Zk_DqY-_o9v${#Tx%uz0x*phbKloC~nhz;N|O`}4MzH5A<4}!cHw4d@7|ZSb!LN=QTtm=vFy4z4 zArS^iTq1?#;@>J-f%j?hKffJbBlt~yiGl`u%0~OB$0wF~260hLXThT0SA>7=GCyn# z8i_z4b#OO+d62GW>*NUp9eM3iJGR8y4bZV46!}~R**fElhDC5g;29?%G$ZA#d%%%! z0yDMI#JyPHcOi+&CAYd=2`A0N#-{jq|z?dw!r0Zv<=&a10 z>Tqkd6^E3oomB>nBpsm`w>FDN1did5&Bg4)#SH8tEn9Ed0iu3hb^^QC2 zH{N;PCMxRakF@S*#_;EkUBNtj^zl4^pp3SX^sDRg6e0CF=@i63r1@oqZexUKScje+ zyvSi^xFk;KML4wOy(>9x3#4ft=HT&Z*SqYi(N8G+!%k+|@HsAhz0kVR~;;A@4Y6 zjCf-iG(2f&40sQ|Azhr^8V7#T%z|Jpo85}G4bH^p^XP5WA4SH05_QvY6QD#hmd}cg ziW{<4QvPb>YkBJCe<>_I6PmpO?8w+oNzC*MtCL@%@45`_R9rdcHb<3le;;GCw4N^t zN>GOv7#5yJQ1}gO2F1LDdeZq0CG1H2t)K}_ycI~`vzc}30o>o&yY=iu4`jyuM2w!< z_`=6eoyS#TvKF%FF?9ZL*KM#%LAZ<=Q{3{kuGgN*T6T09k0xn7^Bs!f#bjIFuU2hV zoBDI39d*-Lz(Xx?5F0F2%|-Cbyfwb1;1iG5oNhnUG3i%HynbiLuNbo+-8{rbkn`fE z(tb&+#bje9BJ|W;apTILM(R(qrp2+MQ9sWj&{tUb5mP`64}M-0MEy_E^9poFSci z^l$JzH1mSLg$5Tdfpg4$+<-(cuGb7KR~{J z?D9XNdI~G7Jr^w5nKjQSfVBSj4Zjyyfmf93k=~n(nqGeGT3im_tsoW6Y58SnvKwVY z%T;=GAO4x<{b%VBm(CT_i=g}li}sIY%kme1013jq%O-X6l+ z^6bet{?q6ExVe99&L6jI2owQ}(`>ZA@jUGe*%|(JZPaPusXYB zEhv9H(f{y=0uP}C^Z)q(SZB|(Jbv{hoP$X{&`oG;JH%SdP| zR8CS%G|~?c{jogPi|31*%l~|7^y2qr1A^(h8H#>X>N#PNIBSA~f5B1YUzH=-`+Q%1 zGutvB?ehcZMd=nH(iqd^Y~eHhjfpyhQ4DO&{RJ2v`^#6|!c5G&ro50W%kA$olit6Ey0qL}<31QUW%93G_;5~qzL!`$- z2dRb8E5zLemy)7g_as9vuxF#qic~s6Thy;hLsq&@3q!BFv3o(e+78Ya&f=g43qKjj(1&?Wf*%W{sD% zT!y$OOGVS}(>X?Uy?W|*IeR^X9poK??BCb+XrO?v7u(6HT4HttD{a4wq>*vf$EQjE z^lB6cfk>A{Htd%Uf!dpg(G(Vgc9WbBN`a?f4LzQ{M~T$$!)0_nB0l)$6O{RQJv-#8 z+>;R&MhHEm>?s=I^my*Lpw~mz7l($B>SiAV9h5cTA$OI5XBCpA^>82QxCJL=_OMKN z6``%$Z!Q=k1ySyawBiMGj6%#kSlWBgiJJ=5TzE5VHv8{|Ui8w(M|_*%+Zy)RKxkQi z;8rjV*S8O8$3+6T2rUNug<|XZnH?gT60IW3#7HQMAq7Xn?u_>XE(d6zs%!cE51}vD z_e&&q*R_zVs^3TmV=m|(`F;%Cq|V;FZoBaCAJ$LaP2j!a6sFTJ$DOVllUmAVuDd15 z_8WFF)UD^Bv)Rgj1qg?)UG-Z(dh)_mHju(Ev@mM0?jY57XMWleVXH5AOnB<h5!+^iK)g7+OLZD3q5T1L!p5ea+?9h(yfQwa1T|*l(W$9k^|v)p%lgk z(brkPt83ys;s|wNWgv=uuXmizWq^%t;vj@#sGer>np|1&9Of7x=uw_-Ql7 z^f3@7E}-pA@Sb$E9G9QbQ)>CIdA&-PkM+8E4@!nqk9dH`q;9{9^vSB_8tC9}(pamc z+-- zSEhhb*O+mYH1+A7Wbu6{nRcRbv{W(24h>7UVE}Si#fb@rsfI}GS`eYYC^4&^UtNVj z9KjBN(WQo@zijPa-XnZm;Q-`*&&i4S`(Xe-QF|7X;1i?UE(EnK*z3@(CfU0P(OQ`N zw4_mp>kyDlIcU*ibpg`;vwUbrC^KkqhjDA3!GIR1*Ez{pj{%MJRSLA2a6n@%Fqcl($_d=shp$yv+l6ZXuEw46kRz@fI_DFBipK3Ld;m3& zZ4Li%FrUU3*^SKT_o<#$czw=*_Bb=V+26h=J{oXWGE7&i{_<~jo)8xU?PH;JG~+C2j_V@f(>R zk}b0D2pHCSf9oj63$zdpuQq(4&&LE6-q=)?YUjm4RF!mrl}H~$N7+QOZ{+HrO0a@^ z%qE;h1N82ujsF24wl9X}gX>w}v2I5@?!?qT81M2PSzSUxJPx%(hcaS^4~!0YOY>OrBcY(G|ov{ z=&P6SF&!!$5NX|N8k*$SCNW@iw>0@IF5n~|LyI;DdR(BoI3f}DWk!F1TPyQuG4Ko zfLmy}gE*>dcQeXk{krb@@T`avsWSO%xo<6vR8a|$Kp+6go)x24nXo55(w) z-R6KCXn70OYY2wTkYx{HLNb0k0QmihlQHzb+U9EjbAZvqHSVk*k_xfIzy%=l#D)Xuq5L=MYmJ>?(UsIm7~utjrIo}+U!V^qO0RNypWv2^6@*j^k<;>9mmo> zUk#p_P`!=qrkUzeFG0!w7QTXX8uRF{hPOD}wR$l}%A%Dvt9z7YtZZi{*)vJEKz*JD zf3X8;kYnk8Tyn&cZ1E}Xci{i0nf`fGfXVMuzr*?k3i|J1@gcVXsY8cdIJ6Gk!TH@u z{Kq%o9>#QB_$5I6uYV?R0;v$Vc?%Hz+r9pB+dn^IZS^1dkA3s+*Ki}C0HcRNATus>hFHOPUpMoM9p1PTq z=*@$lH|AC%J`AWx9@tk^IDIzL`;DP2sS5FTI-ys{ur2QOX)>N}WysbfQ4rbo0o}w9 zuH-!@*=h1oK7;vjv~U-B&S&>H7QJta||SW%;_hAxT5&%fF~IwakZ|YQ#6{SFrWI=XT#S zzS>Pl@mA3^k6nN6AK*dJ%{u{S<(qXHRJ+)17SxgM4DACTE~G*o-QPHM4_r1oRJOUH zRhbH&70AorNdU6RiQ;wGp$z`(yA&`h-JR49f4Sdn zukr{^i#ebrds0yVf1qw{c#YEzJc8L=t>rg-p?29XM>djDGX~mN`9UknhNAdeWjzx zb6F}r11@L;fw~XEmc%xYJ@xY_wO+<$Xg72KkHGk>Gj1)+4Z`Y_@OYmg_T#B{qk2oRgQ5+YTQlf?+3is=!m0{|@ zHOmem?N5|DXu*aMrhIU-J?{iPQUpDYmA?IJdy5ktcG7Jz1RHU=MnDHk4JfPanZ2Eo zG0qTIr$Vy@B-syCYEEv+9nbiC@I;`8tkBL1i|x-F^$WuUJXts3vb1@mAutydX~kZh zA91EL1s*w)mdfpR|7G0@MJTQgGVJh0*^)1K3p;jju6-5K$P{+Wb$dx3SB=nZe(oKx zyUo16{FreM8)?Hqka>~y2T%dXes+>bH0T+}u`?uk(7k?|Xg-T9eV|(cHj9jXRQHb2 z59=VCfh}&fIdRnS8WHdfB*#$cM4A%SDgywk-CTx>;)|}TnqR9Ta8ZJ*$aBuxv#9;` zoJ?4!h?%LiUU>-q*fM?`*y2VZ^edWedwOb7Yhg10lY%}o(G^9yD!Hxw{>({9MY4Oo zKYLywL3S6Tkn4;W9zW_UYw-H~VgB5-<0xbt$uAH3{bTJBOzO9@xyF6$eHjmgiX2jk zxZ=e9DMQaKqV6v4z6;pRvb1^X_4B|S!Z`Zem1rjSRQfFU$05e+*H_8~@RnA~MPj^v z`JG=rCW;C0+g`!or}|dNA9pwNA@K!2{ujaKhq?=%d`N|MOxX5e?^kuFJ}Umwom$I* zN!<=@b%sX5G9c7iuB%z0 z&PS&mxfN7m%QWH)L8vlN*K2*#-y5X-imu!z!WhK1gq~BAD|Fb~n$<(G%twoZ1l|wW zTi^Mm^!@ANx$#H|v`8R{)h3oA2Ls+6J{=c`Yf_~`nHR*mETbd-wq(Js)%H#4=GXYU{Zo z;jIN-0v{8XgZ4G86jf@b?uME&psG52Qw$o&qX$P5{<3Uvvv{)9rKK{IgYgS!2v>@_ zo=5$=`}~OOmeIXHHMM?3FHt^L{en|0)j*DZfbl?42bwO4Tr@W=3*pCcCCyG=cx}wY zE2I?ux5oS|3D?CSRhqXJHAHoVar%E7@$}2P-VSiBwh^fyf>B6bL`)`-yjsPes<#3B zzS*KFCyhS`K$bpmy`NYq(yyk4{Fns*PuZQ}8hwriU0&~-qA&OGd%G}V0|i8}wie$K zZ)=A6ZzP5zm|f`TXSrXl`OC+n5m1_Jm!w~I(new0d#-zx{6EUx0;;NYd;b?i0fSUQ zr6mPHLZm^Y1O-7Pq(nek>E4tmT>>IfN{fVagM^fXbayvMY+w`rxz0W3UeEpA^BvzfZWFb5&_C~7@ZS-b|FeSCcNY^P*75$L`K+Su z;Oo7wk$VPeUkS6lgYWfh!!9z^9KmW1H$4<`r-$Ha)JU&t=6aZ`f3GM5x`dCjGzX@C z{#SXlzyz1wRizu@_Wb@d{JEOCgP=e8|fod0LXwgV}kij`FMfBiCe3n7diUwzhCQ&qzi zUJ8$`uByov>l9mjIs{JNix2KCTh;#iCen1SAO;Zq;y(FS@3)sZa}G2UZ0paL|2Mio z%#IZA?1o>Z!t;sJrp1+2)Bx>pLy#_17==b1bbzs;bpyZ$Lxn3Fec^8^EDaG<%X7T{ z^|bx*MZy#taw4Jf2#z4?RNiq8>ilX1M16LJ?qg_+%KIA zUkLyHo1dyA(TJ(tbh~qhoKdgE0PG$m=gQq_} zS^aXMoO$n~+_382I9|mJvI97=&y8-?uU?P$C zi2hA)c=!`9M7-*wmSz3f|I{nLUnUQCAb(sn+nD^$QY-#>>$dq|IM?BCo={lPAR<7t zZjWo*hW`&QF#;PITF`E}QHcXNCm~NGG$5bAYvy&oOIV+4kB?90-jTZ=7FQIXh3kMjIyxAt_Az$Z)Lxz5R*N@Oyy%&y*da zzozZHVj$^vAqNpE5k|wK?gLo#MoQ}rpr+A)k|ZoY#6?wQKjqyR94^Y{6a0~MIA~Jb zWdKYtgTrN$!Ux}qk{jdj38RrCHb|*z!=upA=vko_urV4w+&DwVrZ%1xJ5~gzVSCEM z9XObPuL`!qy#!4i5jYL5J~@J_y~K5O1XVLUDQZ1?|0;;fS{Bu(>_9~qYzT+XtygqT zCt(lHd3HZa^b|hGqI_4b4iU-R!bT2|>v=V2cfY7+%NJyILI46Eb~49Fu8w=ZU%B5N zV0~(j42e1xY@JIA4WJL)O!bz}VMf(?=O01A+2h-l(a*2VTib_{`sBE6Y= zF5xtvZH~Z)P=I6zfmx|l)h+tcpNyjrxIjN%mKvX;C&%y{iFmF<*Nm642>zvvR@E;g zBqHqr4UHF(GH&=Q+|OHXQX-gyy}Qdu6J=(s|!6Yv<$V5ZVjh_=xnAiNTM zzwZu8u@H|Rdw1zGs+n#B8i`RcqTqy0NbqUuFo0y-i{Z_=_TX?#1kzrd=HqnyHQg9~ zA?k9`szQ!4coZiE>eG%tWZgOJ-S#VRIJmXqQC|-Cx{U3}7X<&Qud!6R1B-qxLS3-~ zd}b-S1v2$(ZK)V3^t<~)J#o3_X_fm40ar&4P>IezhBDOimVrfK8|`#l0U^2_XbG00 z{a>nXGs(xyll$N8=TWI}D_`K2MBy3Y%4|_>Hq^0C<@~bE?Ihdg-Z|P>$@LPmBMu>r z6zQ5Vn-MjgD#&zJU!&&lS#Zq2bP0|?jnodX*VR$~oQ8Ci!Sv5flZl$wie=lQJvk=Q zD+`8%iJ(-SuAV&RQlviJZIB>{Brs7E3xY& zpdWt!A|C(yYWCX=2RX%Dy0=IZRz58qm{62fjkGGsvJv;ChZ?RvQ`zs$(h_89lnvNP z;n^nqyi?bUC zSdrc27rNYt5tbblTFj+xvIpw4UBbzSB#RZsW{5>#C_K??#~#SK+jp?zDXz;4 zuJH5`uJjeG(q zHsm69sWhT=P#ETC8QE7fOhzdU{8+fxC1zB5mH#79pqhnQQ|?DS+aHd+`z|K9yh+y> z+9+)Ua`A*#UeHUJOur`jYgKW}MRJ=uS(^Nh z=*uXG=w;I5a7=tHUZ1&WrHHXo3XypT4Lh=JgzF+ut*#e&Zyw3(Wr7J%{+khk?6sNU zp_!0S95N{b*+RZ}dAKBxRFdIIy4K1VytbAofynODA^4D5Wxhu~t^9K_QxZ15m!Sf& ztx5N~(yGhOSsM)}VLp-zJ=9Tk7Lp1&fXHRER3%=#QsmIY6NI#_P=h<6fzJj3>w9qk z0Zi8E2R=@C5if#@3G?()k6MHb=H0f9J8ZT=iNPX+_)SnmS$l@z7)z%Az!LYoFVv;R zK-A=s0OCN_8p&2Pk1YzqF|CKDIqnH?cP}?-P=Q8<14lW`3u=Hl;G1uGIhK2Ec@;-9K(R zl0I?^d_zFFxIY4=X6LY8M|$yvOIc-YaByDTPeeOF z4~-5xcFmtc+=lu`x9W(3m5ogBLR@#nCugmcoV5FWVts0p75m|%%al!{da$o5C`Wdd zsx|~u$0t`d`bxFYHrLVWLam`-i&lf+Z{mLSX~fA~Qygb{WDTJ~r?x2R_5vt+);crl zY=lon1WL8BBS1;#pr%k+Mn#==F@7!M=BvWe(>N*ZSADHRYmmzr)r~NTs^~M*;uTzQ-|ym3%O@ zE-Gyi9eNk>5$<4got6d{0S_ERMiN>MluV--HPGq5pNSRh=blVU*gUHW`j9%JR9iei;)BEI@yDW3EM1O#o93rP{5aMuKphTdWvz-Nki3eF22$=K`PEB9GF)T40p z1x8Z~B7ZViwg__S>kpIEG1U8q#Ry!ermAeP$y)EmYi9dcIWPSFk{f4O8k_XF0uIa3 z&F+dU7Dj!){Ku!U@DHtW(}1AE+DEN5_Vpvx^E5c2qYa$y_jUQB)3fhiuu=|j;0WXP zpgXpWPic5t(eNx-!T+%eCLw1*I4$ite_Wa{f6G&%Mt1D|^0&1S5>~>7Tm0$EoTDAr zcZ8fy1EFN$2Y5Yr7(O%Ycp}cpLsII+>Gnqa{$vUcaANQ|^6{n|J;Mb81)92nBSKZh4 z-S>-ocP}kMEg?-`(vbCxPK}gWi_OKmZuCYn%AxnVA4i)ERoT4Y*kv^@O-N*TF0sd+RE!?s?6Mi!0W-hbEvU-kBkLGTuWT-jVr}PP*3{R?+lJF%F_8Tg&1-3DGZ1g_8ewtriW_PO#*9%iEfGi~O999>cpe`6O ztfHvVZxZ3CnLFcF`T9peRtvw?iL?Hb*CS7gspKuD#crwPZY*#swCPy=@-_VY^Vs1q z;T*O)t=O5vjGt3#|FDHk-@zu?F8>%Cx+-_#XO3U-&a+%mZR6sIE2_i=&}{ed8{D+* z%u~ih6|9bw2`VaWw*H_OG0Cz{9()&)A@eKoB(autwjA?guL3%3209bhr;@mGX_3Z9 z=Dty~Yb%%}n^j$6dKJD<(!1H(6~h}~IkL0uc_H-Z$~55mi*1HT{PbRjIW+8Y`HqvE zxw!I$4eyFV28*8t@#Gcngjs|1=-3p_MeU!%GZV~~ZUhgqKc>mH7G#O|WYP^qoEP&9 z@Y-=;w0t5@OVV^Pl#(~OL$%H+<1kTsS2gzm|7m*VTKCdql5PHGJewM^V$RTt=jx&ngzb z`tH#et&wArF$3uQ1nY}~eN9yJ_;HqL(hh@Ega5C`j3+AGb_h}^9%}ggYHb7;y1-8d z5`@1LRv6jq%r^Yu3EBjnXVWw@+~%ZD%jB*f0xhW3yv0=T=GBu7BjV-n25~okBXMOk zC`1`l|Fo8GKTpk>ZCFmB%`R7uV35#g&D2m4^MK(l--PXL_;q)Anvcp4|-5Fc8 z-K!x#teLCt8(pi>(dEi+lH9FYqOJWtBu&V2vM$ZX0-wRJIpTdf&wi~pp?zrMgpq_~ zC~L0zWXkN$W8h)O!4wK@Pp?^ZRsBRSTwfQz=17)ibv9dV(bSwaZh#2(*{iZtQ{yLp z;MVfYNho3vssAt-nf6J>bX&dS$ghszYz~Phs=GL-uMkH~QXr)v{DnHl_T8G`dKN4J zAcWu^xorW4kBQtC6pTPA56UOS{X_Sja`$q|qr+4ekE<)085o&)EF2#f4vmXw+K z5cRI@NNyy!JzQZ0-kZ{tI)wvVpiWURl|RkIXf-&1Vwi{ShCTrhPvHzLKOj zt%|>^^(#XE$A8ejXy6W1y?mOd zsw83RqGA^3>p9iP6W8zb#_N1uyU58wYxirqY2!oSbyCsf_mM`48;cH-&;wUizYkfA zy>AiqI?qz;-Z`)wK2}}W{La|hT?D>qzEqfqk~8GzDGHtRXZ~FknM+yoR@*wCk5Li@ zbGN~q5e;aWvfK1ltdGQin?kpeYCnwl-#nvMi4C|yj4~Sszb3xM;Ylu5O?SmNMeT1{ z&fOz)(<0@+#Z00@z&A=iE=L}TjG0JTCMkVW>OJF=uun2yz+om(MPbkl#6CDaI_ejV zx_u}WLq`X7705m>Rj6}>aQZ6wgW!+o_qQu_wy1iYrKdu=q<7=)EeYEJqfRPCQ|6C4 z!1;#IwmbDnIXrzb4+J!3z}d06f^dmi?qp|N9?;#7>2g*fP($XV5QsFNn@mOBTcU7U zYmQnD5?qzBJ`?6(o_tHBVr;ua#BNz_E@_66%;mIa#*V0VJoBq>tMp%`1>~u+<%`)y zOF6nat8A`Utw!$G{|6-Y|K>f)YAVirxv|U>;Ow3}qEGgARi{QKUl(bf_95qINE_WY4d+ zyzhJ>_qA7PMaJfx`tl`|33^MGw(3&NZE~?HM_@E6>mOrl1 zhMk|iu8fR9hSh{CuJ%=(TkH9?YrO@T{2jL%EbXG&vX8!}B%oL1n0pTyR7R(hKG~pk ztNYgE@|C-jy~6clNGPM5XZ!+GFQil4n2g$48pM>$!1JXLm0&`ub&WFHGzncfYPi8h z>^4#bkWxGJ`_ZCN`c63^)p{J?z4TPHA9ZTmOlsIq&QgU7-?IWpNak%77#95#UTv#~ zXm^z`)H9Hrv3)V3F-g%*Qqizg8HheosFO7}Ea2GKm%faX8|KcXIlsv`S`kY**MX5* zlSZu?)NdVi=3I7k^=c0@a@jwp9KA2}a~GN95fd;?Pu4aZ)^p^Ic{|oOb0N9iQMkxf z)L`d>!RxM02Dwbxp6i!ih_|~+6)OrG)YI8Cv$iP(e;kNZQEJy` znQCxAGWR9MN>$e|)?uls`9Q?~IP+R=^uObo|1ICpR1t@Wu~(~z<{Ng~1a$UaUn#^9 z;wP2S4D(5$R=)U&9g7bUq9LSWjq$;>Y+ZA?uSSj+>D?C=D`)oXyR&cQal@$Nw=v}- z%Y&hZ_vDz>LzTkc(y99@<#(wh7|A^OV8pB_qi+1sBjEx|hqkO#GqYsVIbWWnL$^_d zI80U5Qr6hk)%ff_+cx1T{&vTBkQ3eJHYt>ImbXQIP*CDx_=(fQJgM{s&W z!fY9)eOV$Eu0(5*96D4*Y$q|gW|0{jQN(M;!R>0f?ds*6&92pxsCu-iBQ zm0or{7d?jQLK;IEQiB@i7<&xa2Xfw`D&MY<^)d*E#t@X;4&A`PO}IVkP%C)x`>0^< z&@m)fC7+rC_p+)W+dYT_n~vsx|7dueScuD`8}EAD*~$TCQuGzh;703&S)Y&}L5i;` zn8^!XgMsKyJXfsEbhXu!a>5mpCp`EeM^|vKdhI*BA(Hyw*vt^JbA>h_;|g#Oa==z5 zT+8k=EwRW%(#K_%aU1!?A+*BP|LRZidE9kV2SEzp0*Xo zkr4aeKfm6IfkVI?YM+5iBgC7I27Nv^8Lt<^8=G@%lAyVbpY(|FByl{M)N>z+%cqD| z!RWI+yqq<735%G>!wbja5~6+`vQ9`np~ZgfbK=&t!9RT!@b{7dCvGVaZ*2N^MD{Be z?D>+ej5DGVO$ zZHAdA*h;?th7ePh>MrWy2y9c(g|r=BANYjKJBxqAJiz;e341sXaX{S=3xJgJ^R}3h z@4sTy)&aR`@Y#I-LyJyJViz6b!?-_t_08)|SoEbT0Kwdg^x$wize|2d{HJ7hC5)^)EI|esy(peI z9e@31zIFX&LnJUmHBe>P9*6MkUia)d?SuZWPqh9yGfIB2F4I!UgF6GPXQrB803<-C zq2&lMdDMe^hrpyOiAcI+1lk^40+_t&0AHkMm2iZzP zTQtScTF6}j&V4#~nSXt&$bUT&NlFMQ(n?u|(Gxe1#89BY znl*;diirP$+k#`-Fsln*fY}F!h?w{qOk{fj&!I;k1%IbB`3}t28;fmwtg2H=dBj+!~2vwj28cdJ#@1-)g!SPJ9k zj%Q|o-KS|Cc+92{D{$+@^Fk_NCkN?RBNQ2QJjVm#tJouyJl_o6(I( zEKPJVEpZuu5bKna0;52>6M6PwEq8v6vvc11!GOq)6Vp{^C_jS9Mh7DC+;YQiN=;pU zCN#;RxYO~*x*NX7)oVX3Lu%SYk6oN0NP@Z`pl1c1Jv$(q3_!MTrEd)!dw-Z_!OLzA zYh);{clXg3u${PdP*)BOAb9&7%m#IhsA3o-5z45mAfWA&;U5c5iC5sxlh$rLPdul4 zm4X21kg9HGBGD9)m5lyk*V*D@zg@nBM2wHA^v`X?`h@l#trU&zD9$0%e5lEWUSQm) zm3zYs+{d0tRHo?heOec8dG#ztsfG{nbyneaq{4$XLavZ!*uI12FPswC7->bBATzi? z_#LntGB@G92Lfa-*Y=RC&c*8n!nN1OF>uC z(8C!}mA1ZEoW24MVB3XG2B)q@mvm><1PnHsebxTPlYF0i$#)kQB{wVl5g)*q^KRBP zQ~BKd{-#Q~Mw*(j{E4Gx&c^HCUREHE?M=77Rj^bat&P5AkbCp^1KiCQ#IT2JEks&g zoK9$oa{`Mn9lE_`^~;Ln@7vPHnb z8|I55aC1uu4?YzdFF_j8kO>oc8|=6fdGQ7|_^7|~ThBUdh{WsxYagMN zPGqLgg%}`rr_TZ~ytW86N`h(MewS+q7;ihor;Woc^hppZ4&tS2A-c-xm7b+lwx7Q! z)PkCLP3AJa2|X%(q;Goa?4{kt-g!1sIBlTi*?dxxe5AffQ-sZMVEf={9z&SiaK0Z_ zm$k$c2qn!m{vy+H>5zWNO-019%YN>i$?^!ar$i2KVo0{-eTgLw)tn*l=Yn$xTMKDf zvtTE!%FQDpomZhVNzUliqZ{(9K363aPuHrS&=pnhCM0l_824VY@lwaRAfeTERm6v4 zBY@Kt=2%|QqiT3>w=!t3yDB|g0eP>(Ighjlu4I}pl49e-uODZY3~>u%++-&F93*B> za#3zz7U7`rRgS%c{v?@KzQ&7^?_;klc<|9l=dMatOla3SJiV_2>6Xh%v!bA)kKQ>s zN3^Owd`z?rUQ>-R>^@&TVqgC-toT6vzIWbZ0k@VReCewZ#1d=0b$(tHR-;VWap=7k zz@SNn7u3uJ^@lXWW&LU3hNyq({H`Gnc1wNqDT+7D7?Mi=-MDga4IuH%qnj>k+OB&u zh2RdJijz4V;xLwM7PDA}lUiWmwgU0zhMZ-YLy?I?P4x9%uCy5^Az!SOG zIFB?5Mej?IPfc)4ve5tOV5$k--m!ADx50;SI>8TAE`>EWxVyuVLu-Y#rZT2zwo?2_x;N{0oHW=d#((x zMHGFieIC~FyKe;c*N{v51lvjA4M{0jmecu#&P#j604>AT!&*aDC!H8v zzDphNCCo^BTJ0!q>u=q8>T$W_z^7lrnPh?*GjxLY^+I0l8VlW%Cb4zcVfRf*bFa~e zh0dIOAz@GVrkYAb!lydg>>MfM{q;57S5u0+trt<}YlNoWU%_(=iXCLlgLZJ(1SYYWZghbGk~M&dYfks`6EryPo_BYGl= z`o{E&0rx3~!+g{T(f(iAdn#B5P#*L4Tn*z7>(FGxTNG2E_@U*cfkPU8tP$bN&?YnN zygTaG>JzqDMz8<=6a9%Xor$9>Z60f!F`tOGEXC><+(~%(K2D6YAT7NYS&h9!@mr@TvXe#{sq}&W2eR;p89djRncI1iD;4pF5k+txKpLr;wD5-P|r8%WQFRy z6{B2ZD~ldvG!^XOXB<*pf->-zsK z1zk!{)!fn&UBL%usj=t?eBGsz=#q2q<5+!wD#;J;3{?n?7l~uDzjsE5Vz)%$+j=5h z&awhRJ?fphN+zW%)nVS>_(X35w#yKABi2;X*8?h< zA;HHXnRqZ>hUGh!M#6fD_bK)ag`H^D%No6w?YaS|rQG}a-*c_aYd4f)_4?%>!E%2f z=RS6m9KHXv<(d<2>gv}RV<;Zdp?HvV{Smrw9g;^=4H>t{L@P4Lb%oE|UBonLo zUWo7&lP8w3shae-?kT*mk(juZ7%UflDzrUm0@2e^PAIDU^%Ea>76XRhH~Z$Nn&Es- z_U*10?>4t_Mw?VW=L;~;M@upptMxsQCM${}=k=u9Q0R2!LJ zi+8Dm;6}$vFc7Sy?ZZ0bl&h0enLMMFkM#>b&fYBW_9YMIr67LVxJ#fI;_{A9)P&Tq z_YB6+yZa|C9o5{~Tu-muyI<OOszan4P4m*_L6tE5T+;Aq^cj-SEeaelv9i4{U?f z7b16vVY}48hLU!(=90Ymr)7M3=>u~zg>_lmHCbC78tZ#7oXF+$Wu*}?Yj(%qM9Wcd zLV2~K1Kkw#j2iRfI<#hf@;-aDWAIwVJjQfuO-`Z$6jT1%HSx;1U6C=E)SEz<>`ZA`UKOb&==!~}-G z-{QncQ+qmkjOb2%?b*egU+!@q+9jC1aH;SJC5V-Zh-d@0B{nv21K|ok6?$k*cBcTw z7#vNIPrX)seoW3T&~1~lK=Q}+=6J?Wca8AH=SK>yD-g_;_`rCI6#>-k{JCO$MSiB zxa)KE5A-dxG6kW`4=S%c@Rjd|*TkG1q8sOG^ZgiL*P^FGm*M+$Zqxk{l;uL>gbjus zMwZQDUNUzp8yuN0xBIlsVW>Ke!Kl8qLTm9*i78K|UqsO24L;okdExM#k6yS^TTH;v zljEWYz4QS+%zZP4sh?Ugemg1I6;8o#MMNE3~6Rz@3f^eUkud0;Go+nBZdu+CmB^R|qN#>pG{H&Ts}G>? zKSPGKdW+Bb5&KCdmDL*uBGTh?B0jYw9J70Z!L|p5Df$=D!beni=r1*rQij+5c8=v& zK(^keeqzpJsc^X70R6cFnX^Hh~Mnts1oD8|~&Nt?2L|~NF*4XzB#aGZe*y#wAxJTJ>ui|o~PXR4#O6j9YfXy&1OR*#vcCX{c10fUHS$Vh4r5N1o~oIpo=QQzB4Bj zXt5YjY_o47vL!8R9dn06AA45F! zfp~ZHQak3(9y>#UXw_9jSbQCSVp53XzgLb`qJGA}=TqjS6>Os}YV|zje9G?$A901Q16e)w0Q=hVw1o<=RG+**E z)bl~V5!JOKb`Jx&NOk$3FPYA~0#2^9Azf3~dxYPl=~C6u=|8WRc@;#|bax`=CY2TG zK*Xb!8HxBakFN3yXFbh(F(N?y_|?s*i*mPijN)-U@6b0kbM|}ZH0LBp?)4XvJ4@hA zJPmn_0UKI{d%V0cKE)ZLgs^Rv5m&R;cKH_pU-ai%UtZ5LOu#%&$7q!o-n-ShR-!x= zuq25I2-APJILOs&u?6#jC?|Qt7AdAyl^ZY3ZWmwI-?b6I$D7_Ro)q+8yRjedLlBH&x3?>j8bQ8{;XQDgb{u}-~YK@+ir-k!5|}rr1?=Mp*ce| zqgA(m5h0zMfVf*ZN-y$aa=U!)*dvR3wpIQH4Hz44>f~!R9op%p(Iy$m0@6XWh)j8m z!?hV3vN(Eitd zzu(RP?K;Sw{m^%a%lAbLctT+&H~ zdTw><%N5Wl{`dFcp?M9uG<`qQb^rVa%tEk8Pn{D4dE@X4;Cbu@jZ+6m6@)@3aG<$m z4q$;ookEa%8h50r9FveXHZPz>F;K^FFV{vRpq5*GntIaIsQfYSLYS*n`Q46f7mVlS zf3zHmm-5O&cB*zK{lkNB284rlj)PB3ftT9}fh82n08wP7p$~>n@PTKd;XSE138!d(+`&de1o%5#)N-;Fe@Bh^TBD!U0+hB z!8FCh<&3{IedJmjo@697q@$s3F?&m5wc#av6Ke zw6_J)%CWk_1Jp>U1p|Sb6)#fx^)}j$t6z@=*UG0Fej$cuP}}{rSLS@5xPkte@#h3w zCJMs<(ZRvz(dI5X4}cg@O=_Lq>5 z`elOiVC;`vBOQ8M;J#Tm;I&MyUoZ1~%bNr{JpQT1j&Gs<97#p&?BB%Tzu#6?k?wTs z){)sykY)$`c!=LS5xNDlu6XMDTKW-w2jo(Gmbm~q5icO>gU%4UpGxIG)PC)%bn7s* zZlv@@KksPd8|il6CPYRRJ5O9?`yD;#vaA*Ob5!yzf6(>o4}5eF*i9rs+%b4C zpJyRBI1hg+Kp9O=a6(nn^0mEkweCmALD<1)Madvez_|jaAd_}7m|ApHus}jZsx{=( zQyBR=N^Af+nUn^SR9yjcbHULe2J@D1D{S-Lb3{eAKmD=gJ5c4uDfMf1n%Wr55Vo6`CWxlxU}i(xQ}av(~8gDwuPv~gkzKk*?S7L85) z6L}wG6BBf;=aV4kHqH4Nw z6Cfj^K3U@If{@C|wQ4a<4lr7dvTtuj%IwjhtKs(Fkf_yNZ-VWW&A2pF{TOucRvSh^ zt9*eZhXA+#rbmN3!KK{t%{RB!TYdcqvJQGem1Dt5L=<0u;ZhkV{Okx`eS%V{e-^sN z+v=y8$v9!1z59?*9k)^Tj*Uyk3Qz_|Lr;97mi7il;?I{gj*~)n1!G7%_9$MNKfAVc zH=2*t>yV!+e(sSx|97QWxqcl`Oa5^mD5r&e;3eM@^Ph{-!*P6=$XN@(VUwh61ooyt zDeq^cG?i)!AiDOiECsE^G~A{g9ebeh-A-7|0UBkEAbH5X5IOOH#C6gp7trdi7;gfg z^(n$53m#_-bfdew-rlm~JJ|874#)NQ&>p_sO&1;)m=I7=EH8_qTVe4aGUrnnx4Bct zCr_62DpeC(s$1}fCvzJY&MxG1rIorL$zp9#UCR{yyv7n6BJ)jwr>%buPX8P6r<7Lo z_>ykc-;|YGzwCQy#(vP4$t^>8ryp`h1oYMOWT<-$y9Y=*4e)10jfS`#l@L@BNp_{f zinqe4mYF+-{{Ft}xKYTmW{n8aHTuV${ybLl&-SZr0)Bt~lM4>mcyT@xNvq(pDyy(K zhUSC8VmVY)v!<@s?4C)GlL}LqLeid7=}oFBANJFvOVZ4eE$5_0EEZ!PaZ_AF?E$NJ z=KJG>U+};`he@zwHM1J`xyueOoj1Cpge~EIO+eMIVEi6aFy8~mlXdnIdq!Xd$hW7X zH8_M;ijl;cx9KtTE}g358xNm`>xsz(vv&~nzBcX`Emz<@Kh!BYD3Rs{uEvA2y25xz z8L9Ml)f&Q~>9d^cPwgGhFwgm6`F+k3WKY)`SO@45GMi8NF#N>=04z!es0;K+ zgjq#6KDRN99zFT58t3;yD#RJ*f=9fwSx@d?-;W74w3<@MG`Owb0vO1Q{(%4n0b5pP zIoe#s`;>H&>6A!8DYu?ak%SScFQw9O*eZ4Cdl{#M)q6u@Fx>E%&MBH_QNlQEQmB`! z47GgZ6fc66uueP=RgiW38CO_lhMvtKE%DEbcb_ta#3xm-`fO=zA} zf#v-OC4cCx*2ZT(R#_n_UFf}|t{`#vicp07l4ME@^^_&-^cvxKK4#(iZ#LOrPB{vi z&!L?1mrhdXLP-?h<$QYXB=0!4hu+!HpWy4*gb^+JOc^DcI6lvW3%y&J>qBr(L$YoDa35?@`peS7GD(srGNu%T*gTxGzYr} zqg`Jk<|F~%H*|0(4xg|lh)=Fs>DInHA20vsZfvB-a;;hyWC#sC#T-RCrSY=DARFF& z!U%Uk%sH9d4AO7v7o`Ueo|g2G1@;|S*jlF$@;k0Iz6iE5Eq`95GpO@NVNG*P3hD-X z{Sc#*dimbh0AmNsw42l^d_@0NHxBF+H`&gvC8oBlO=}yF-O%Jof0pd`LWL2VU;61l zr$LHkgtbslryCAW77vNlE3rFQR1pB9o4a>NG^rF0Z)l&-uZ@5wlW>a#6g3;3q9LK) z5LL@vspXY4C@pB{0lx_spJ$zwwA$Q7j`ILe9YD47)mrM$LHsv?g-Yhp8;^YSMu2U2 z!qa2rH(@nMw7YB0+uV_;^_NY1*kMybHRqIiuC;FwN}gkAaO!$$yY$KoA@&v3y(xhU zh1y1%GwrNb4$E#-Z4u#$W%s>!<(nUh;E z^gP1Z+$y{3cGZzDw}JYW)$H*|Ia>yDnQ}JE=U%_wn@8)Gj6L1t-Ixu#adwH#aMM@n zLr=he_B{QdZ|r5uZ%ZhZ%pSz9>%WsJH;i}iG|F8Gqm*8eLr3~dV&$r?W+@!kT0Mkwmf2h&tNtJV}@j>M#}IlW+{P4K6ce;?M)5MVX$AFRY+ ze}w{n0HSCvQ6EEkn7FGR=UVmZD>t8Q@IOpf-Y_WL0Z83gD@3lIv_tVqsM(a*LOy^4 z%ce;KkMT3`XcG_ynolH1_SPD#n#{{y4yC-O;(%{dereS73-_ODhsS{otSYYM*B8V7 z^9lcJd!MGmqFaBZWjPbE1IgH3BgbZ}Q`hbi)@;L3Is-OAyBPm8!UW9ZcmI{|8&fNq zOwYmNDYBgV-Dc67deCK#=HYkzg=Oko!c6VFdcU#^)r+i0k^EuH*kP&nb0Sz()Bsda zWaNDg2SI)e#Jie!m%Nn=XFg+|vjLS&VD|vu6t77)^JGjTe}-D+@R7w(`~Ea3rr&^) zMuU{43*u8Rk)BBdGVrVdZlcOo;8Qz!h}b*}C0#5lyN?C+W&zaT-ro@uk@}BIHM zh{V*t0+5?GcNJz1&ZIbKiv2`IeVLP&MM&o*Al-qzyw?3AhcJUbm`t$aK-whKLWjW{+^tops!aSkRu&4|KM=zDomy*)5>@H zn)5=78Nwo81nmKlQF@tW4YRc{^?mE>jV^8W2v_IGAUBA?+o6Tg{Uz*@qT+mS=AC}A zr1rI1Ok%L?O zecm^<4n4|$>_;ChNa27uQCTS<_>b4Nk;g+@K1otS0KgcT+o#AJI`$thxe&m7xU(x{ zf*tR-wmKB&a&SL8Hq!P2!=dUup5@}`nAMLPq0C2L4{_Nu4?$X)OHB3cXG|!JC0!uW z$T60G>NY!IxYBbk%%x6bNdcJc9Cai;$6lmK8vNA4W!5Hq>}jw&G4N=Xkz?#Ym@c9>mb~!;+a^jg_AtZmnElGSdMM zod^m^=^ElvI(#I)rBK2oF%1Qmy3U-B`+4gifv_V%AH4M&2 zeybZw1$$eKp`&}cx!~7_4gq!_ky$B0y@a5o;hZ%f$T8k; z@$M=IVX1XskX^4s>+w{C>EK{sYT@e9E9lMb2EILrjIUpU@s~?^;USdMF81vVq)iC3 zpWA_+|5WC`98t_kU_~bDJo}~VZw{&7Pp2LkB)fIV(G6MUlV{@TsB^Ah9oGhn{Q4mm zdELM;#_~J7H3v6J}}ye_c%nyj2$?urB5Ue~RJ7B|b#UA%#CoNsm`wyHY3?t4+} zS}x|1uGH7e(XjQK-aSpYvqtO*n#jr=02CCcEw#IRF<%9H3~=yP4j1b5I(xFMJ61lo zy{u%1??Q8ScRQ$|KW?=uCt73@$Pwz7&r-%7z$3pk}_+_O=(f!72mAt~ni=XG>nti^G!S`>T^2M9Vynwea^tg_nqB~Qg zFZ;vJMuUj3=u4tC;vReJN!~(hUy{mERLQTIio4(Xel$FF)G(Zh2%oRWIY* z^c>V>s%_PW(C8~fCuE~46xh6T@bI-oiu0zOXT z%?Kd#I^78I(PjM`pa1Mmy^jA@`1<&Q?VJDOG#Eu|vFbRt*D6@{WKGz4Cx2+IxE4Bf z4T9B&^ZVN?woDmJxj9*Og2tV`68|4_Zy6S4xBd-NDj1|nw}PO6fHVvULzjROQX(MI z-7P2}E#1=H-3UkuNOulMH$x2r&zgJhd*AN;|KHEE-*4}6%!iqQi(#(oT5Fx_cm9HU z4GaF6^)rM!m>wPAI-3!9c-^Fx)i0eLl-2Bz1asKo13#&u#IldXXf#y43o8| zJ{hN$051JhE>h9B&~t-k%yUIOl#;W9tY-5=cpVk{9>~<$->kh)#HbKt6>LHOLuJ?F zldZo~x49(QC2>+q<51=m9x2)*Ml{`x?zYdH&j#3WHV5ohA*13ooDg-zNTJF`PpcKo zr*wyahqAq@QmQx_16o8ROe1`3iFZ+c7t?p#_buOE((7Z;T}F0CxI6p5_kIbpkH1%e z8VTXE`(#Mx-tGO@gM7_F)+zIPMKfZ6!9C2XNx<0-|HpjsH4GojA5yFt3SxiFA2<2Y zsX~HC*y(J@pzsX+3@6HEs^cO%0_}jH8!j1i4Q)bBzf!Ff$dJpYBV2tr>7ErQ0Im83 zwKe(ekCZ_d(r&RGiLMUpRCjYK1pVT{gSX{whah*bV8V$lhcofjW<8cH!IG+S+R&lme(c_f0(HPanLg zRaOOI$l;cz{S~q>l_+d-Rc1UUf9CN-W&gUj9Hs%ro2j z-yyGbaUFs6;^YvukF|IDcU;zOC;krS#Fe47-6f8jSi?>%PB5;~M*4af*ZE=eG^`T% zN<|ZC@U}XQ{j;)qLqwCV#2i>He^lmls7E@yx5TRlk+Y`pPr~bs{X{(Nd$yhSOXL0= z=%3GbH}ERaT!uJ!g z2!5RAiV6jH?G&2%?zAvID$b0GV!L!tyYlB=dcFln#f8VeBC|@Tb#~|~axh)e0_RLX z!{HvAj-W%tljf^Fp{Fa0w0M#0k`Cq{10TR>PwuLMO&n46Qb&m*eA zXCFj6D)Gg4pi;ZmKRY;2B7pn%SzDzYhQ0zxcxi?UBL<~p^BUP6-=IetH}4KVabXA= zIc4FGoG5KQuyujgaDSN3Oo$Ws$<#Qgzv zc%rAk!#$XPC*Zc^2LL7@+Be10s#jw#8|Xt<^hq$a&op^I^T$Wi1@x1a33 zrr%&4@%~4Oeb<+@6^|tuH6;%;ylFK{UyJ zKWOc9jE+lpwMO1cCSk>RBq`@R5+x1ju}Xd=5Fi|b{WYTN;ZX2fXmbR**A1@HPAPl0 z5ZMtybBbN%B4rrYRL-mO)chN-L2i#Jpox9Dk#^(*JD~A@@9{hDNaT{XWw-x1=8f~Z z9eV8wfo7Hfg;ht&Ua@B$Iw!I71;Em`l+yOmfnYJB7`B3o9y~s?n5X(r7@CF+N2+B& zc8WjxH!wuRw*`2t7J%N9M4>eF0ti?Pax|Qa^LRZ_~5{!z^Sqe)BSNwC1PcxPO9SKy;QWB8dS{ixZqd*@FF`HFg=G|^ri zrcVeO|7_fT5C=few>q7T!oR-z-J2LAH!0WBqEJPOu3}^aXsD-zMu$3n05*nj_yWoX zLQNP{{1QhV1zz*O+AM*~G@5u$nyBZNQZiWu&y1B%6f5$o?lrJMDFJb46V;OLL#9Qw z9Tv4K_fZK=NWdAW|AAV9lWq_3L6k1cr>o!y9pK^z>7hpV1ZvAmEug70+`TPwX8-`6 z=e9zd1?3H#qG0*`!>0|;8$@Ob!6ta=yZ#zdfb2%?U3kwrWK~e$8=Mn(p&IMMr2A~h%Zis?#!>?a`B-YvM%}uQXA)LY~{rlg684%3Ib2lF@u&1#lDVJC3{l zEwX^`O(zAYpW=IIn~{If1%MJ8l^RP715U7(faM@JN!fme@?Hg1rv)&?ha0a-I|72? zuH^AH!2QjEj7et!)sWss8D|y9a*283Z-Jy!OFs&muKNkuwihf8Qw?74T`BN(ny)<4 zf4LVd+KC|I)-BD*UH)F|P4|Kq`w>R7m6l}E$KP)5M;IBg#QAGH(0?6qoTo zyr}`9!W?9h?IAL3FQCEIAV#Tr9Dpc*p`C=99vwO<9VbvKOIB3=HJ~r|H!}tcXQGur zpIpcw|6LCHZ*~8RM_^K7i;Q{2`0!8e3k}9u0vdc40d#E{F~UIT{Rh1O?9+txvMoVc zbBYD3sRx2ggb?79x3dx~KGzG0dIITb5H`|Id=JE)^dPn$!HvJEsIdhmx3 znVrM-VnSgs1~>~%0QJ~9aKgU1wiEy(o&Y$D+gmC*F0`p7cErYcopzEAWQRLrsqf|HeR*u&5>2q1t{Ap3vT!LiU$TzuhB zc#hA~ZU0KMNe&a^F(ZO;rZbR)C4r)V6;?cEizMRqXvK247<#t2tgb zV7vk7Pbn`=O8LAAfx0dp51q^Oxz!Rp8CQhy_bncIRJQ*CGaGpDCZFM_Bl+0L`I43wAc1M4-kFIVer1Sf|IRifK zLegvMc%2My)fR#79zghz(1EeOld;c}4p6OT2@8j8{+h(P?x9@JO94?DQPpj81O|}n zHyf}OJqE?B(X_Nzmt`U@L(|b0g6;-D`*Q8V=>d74pDB3M6rKc2tdnbmS5*!A-D0h2 z>E}b3?IyB=e4$PEdG||i{xoZcZHiTzpKi9Qxggol@(OI9-T-Z}NW-gZ4y0+W+4;p) z0A`#70%;bMYmWA8Z8_*)b{OHI_{ZB?tG=xc7oSjR(6Hpktz9Ulj;uW;*gQEbc;A>( zj%i#32y=xbmHWtb0d~r7(BDW0r2s$dBpm$vx%$yE7XFxJGYpp+M|dcc0dK{fUm*3M z5J;Wr^!<*vg|5-H173<)3d>pzEaWil;bZ)#en8reA})f?EF&ws&66mgX)gvDLS>X7 zWk=^l(Iy>Itd>so3mG!qc(}lBeaIn=C=r-P0`l-xxb=b%F&yL>@|%v7q`m@ymSrIv z;uW$F#>~{-<@Se5O7uT0Q(`cB#Q4;D37YPvV%3reEba@n>j9(pvpH_+F=c1a7Dl9E zD=-2#-fcn@txi`MtE9ERbqs7^6jOQQO9BDu%!qbzGs#=00aFREv`tTY4bqeb`1nIV5+BCTW7XOIMxfuY|EneM{XM>%7o}qv;o8RDrK)*ZK?(v-Liq?uKK(Gy`_*)L6XF%Xfod%~;AwdIw?KR~nl{#!qfaZt4 zyEJ5UV%4l0nbNkA{&apAS_^Zm-Iv$|0v}K$syW2TmMTo0ZjoTDB{|L-=BtKB!G&F? zagG)n+BmX!aqU3z62u|=Fr&E>zaHpLU(&~4qTr;9g`|+h+k2S;c)nY2x~E)`!8}_< z0=pHa#r6Fuo+zr}h~vZwXrz|{6|P_PF%a)g+K=m6&hwRCPO|G4U<93a+7UEWjyA|` zSTyXV_2W-Z$)-%A6wmwImJl*d4ah~ml({Y^9g&;~(@@#8h z^(!dvlgHJHib-H_cSf8(t^#r7< zgBJ%7_P4$$>oA=QVXz-@t3oRyg_3I!s|ut>Rh&R0^|O;5;)xwKtFwX%CUq?mZX}8* zN}we^%CQbT{HD%$tnYs=M&&VKVYQ0AtBx2Bj@p^6Lj@8neK#sv8Oc>~Uv@dFs_5gA zFnE`kw9+5Le=xH2JxBPeTA-Lop@!imW#@I}DS9n^#ZZcM1lQT9T4R_;k?lcEOA=+%JdXM$9|M~d$01g$7m4J46Hiw~*ewAu_Y<`w zb{WxAZdBkhVoLmnTCVbUOUWal$){bA(v2z8Lh;^ciC=#4#vV<1)OKOT){6QDg(MtK zB?EWSh;E}(|5{h)hq2aCCgPyb4tK=SejuMw$oNo_m;*v|ELggq;8Ure59TBltBnGL zMYEy{eqb`VngfK0e{{9FWKpt%FI6GG)wlmK-<)~1=qkKdFod2EvdFzYxv%h~4ZkPA zS7JnRO|VZq-e}DK4X)_c6Gkl<^l2wfV#8Cc2^8ycAi^S1>YcA#mG%zZ0pI2In4)^S zTxE}hct0vKf(SetI))FN7zX&KND00RYGm`bOyR5V0Xy`GPE;Y{87M#bxBe?^{CZSk zvDzhXp0`rro6oo7tYDA5(u%iIUZma~%8vLXm~@<1<8R&WdVBSjuYFpH{xvt{X4v}{ zu7~9qx!sf8`~o7S+tr~Nhx6aWQzKXw{iiDF-B*Q})}&*oLP#~%-}%c(HgsCOf3vmV z`+Vc`wvlsbu3Hd{# z-RktpUg1Bk=wC0xd_}GiSB8jZKU_uH#1xTzyQhRSVub1sDxLfHOjc$p_zD}?@*iX> zw6v2hxU0b+B<}fZCJy@0HQhz1fbUD?So%-d`rn?@B$=0&-En7V6y|ERX60>#(CXZ(h2d2qc3*D^QheXan0UsbBJqzt6%(YXWStgulGS- zyaNFP&^Ib4)& z`Va_`Fy^JkclTU>7y~uQVl<&2w3&K-`rRh2(TbvolW7F_{_xSOpo56cqY{3_Y{Q<& zedAMs8nW$3!J6sO;^y&SbQz|nMLh!h=YRC$7RrJ(rR%QLdv~0dT0V49wYyFMbKE+4 z$I9j5(xgD*6GQZg=&3z}NbFs z6F(7Rr_}#Ir==G?QpoLade@=N~nKyL88S%80BgZ6Y4;Xo$GuuwR1C*(Qx7{B$2q2rHzR=9_L=e=GT*MJb8 zN7^9ufWFl&oyaF!E^di_Lb|f4GRWnZ|7k{S^H9JjZEK3l31_11H`x%Nx&dx+DaCdn z^t3XUKR`fgE~|~_g)ffB1wOk+VLrLyGbe|Eh}S#VyHHnKq!n2laDyA2OEjdt_gHy! znEG}n$;J$45kte#mn#Z05dNZTS#~1~hjv0sP4oltssM1zg}DK@x&<}PBp3x5Nniz+ z-P((0!98qqUnX3#NH&rs4vH|Q4~L|OTjc~E;OggDcdD;IysZ2Bt;T(hQR$R|4tO_SwqA|ZA-923wJ*(mhr(ilx-*6q^Q`8P=yb@&2?HvYh`7z#$5y!cH z4veQ<_uT@3M4t<WzfVT=8*2;?$M8n|#PnGc^mM5KMKA#ey zCMc^@7!aX$E7-Bn)6VjrJmX>h-9_c__DQGZP9mw*-L+*Cciq+Y_d!xuKdNHZ zc>PzjXW&$eW!J5A6zjIG%MsUiT@;!_eN#ZM%`g5WLw9vbWit`-r60oo1&P{Q5?lax z$toZn(=;WH)9y7ip&=8jU)5*}-bZNFN9eeZ>Izd}KC*7Hm+oY)J-~ac$6f?j zYvsG5W|T49Rm0*F+vvx%UJ;_ax>K1i#RrmwkY|EFo13*kDtGw7J->Qe7-x$!hw39* zd^UaYHR=>L=66805Nj}4~m z(*b7(L@T@{_2CR>E1$`q^0SX|XmOvw>R_H0^F85@E?_6lq26cA=UaaWohKN6s9-bw z;Jkxk|3*k=Z>4<Nf8YgC9V$R`9zhEEwX#qT2jq>iOs#N?%M1Zc`GO z`M;1baiGf%7zUfYyfU9Y{Z zw}Ge3Aj3()8bVcg^=SXz3T-0ijTFlcxg(e6bVTUuy`bD58DV|{$riU630qWx!5)=$ z&M3tdYkC*7s8f4MvjA!3Q^%3SAL|*7Ce|3gq~y-H+v=WX$d;(H`JWxU^AdydNkC9| zjS@B!=lWjGU9^@5ovkq)mhMUu-i!X@g8Z*M-v)dt=k(u5;{RjzPLuTNS^+J#XZW{a z0XcjR=WK8L9zZdKIu$BH++n0lCziEmznt=ibfRDFCu7n~{EBo+i8}VjNP%}VLT(D4 z`x4mP`rxFPLK?B(q0LL(|1g|WRw2fvwr^1jB=$ zFg6P2!qe{%G#1FFvi;VSz?Nzm=l#zU^lt<;QHcdWb9-!H^s+<&*cG4*57=bT@vo&k zD!U|HHA6|b|9QN(2xvRer2b!&Z~xE`KlL_PVX`@WVe*IZ=} z{$rO3UfvW$$2q-rNx1R<=|INR)!?xczyr)@1A(Kq7?jk^=bUn|NSu-(%=~H2D6Qd|N3N$ z=m7zLbBVT6Qs{qwj5lZwH;d?S+rR#=XNa#QsO{E7QBJ?)e}9Y!AvlJHErFlq?`P{j zuggEL#)}Cs@v@nzy z9n;mDrSP{b(El+Y?sB7s!t}k-v;XI)`PVP}F?@z=%s@*qTL{q#t2*`@{lkNr+q$Rx z7`}9^n|qKS^-p&ZV=2!L9EdZH1_0B`P+`yN=BqQ;{A1c;+)LOe`%4~RQ*GIkFSfz! zEcIrlJ=<*kv*p2_KR-}8dSSOS?(G+xY^9T0cIxJ4{;%g({Bz5(_=Z`zQ<>)#vRVkS z1amk|g%{Z6Ho~fG*157@BW@L!OGxsB)_W{1v#YvgCl#7R`79NUixP-Hoh(|hH>dS| zUp-RO5P`nQ$3Jygr`xpYe8^p~Ym2k%sF|tH|GtT4uiJ=v@>Du~EAXT3*1TsQu0TzQ z_FPrq_A8eZx54I_HDBVrSxc|`oz-QOjx$U=xT)N>0WI)Z)~cxd=*#hQ?rHVzS=mY2 zQB%#$a@J}ghxuVP&;6+Is)4zC1;+PqZI0UhHKFvSfe$N9J&qUQeBOMRCeTvgk(5A!p%G25D{ zCb*SZ?>>`x-FH zI(@1pp%Drh*GQ@V1iW_FjjXP}aRK8bEV2cOX;H3`;{HC0dCSOjym0dEbmeCANw3Qc z|I@ZQyLQBFfwka2CJ2!be0889+6JXd74rDJFNR)Z)c?1sLnN8-XYqvG0z=`EfC^*% z4etEyFdviY=Ql=zwi>6zwIZ2oW1=3F=Ib604+u~B4bPX!v#waoP6g9VeE;^?=*>rA@ew+Y+5$CYY%@?gYdiYHP};O_Jw zn`YJ9(!LA3ylpKvVpFS^Dvp+}(_|y&8@rCweQur1Tjj-`VMzEA+eKr+T)4bho8smy zgnELTbtCGeK5~M^CND!Lh0isQMYDFo?_=hgtQe zbxD-=P?%H(r_x8urjyTsPt4xh3a1#Fjun-q&rV?Lvz-?_(m3o+GnOBFMUm4b&t&FG4SihTaG>x8qju=03zhxfw!6~Kj@#_^C1VUVxSIKZJoBH*k zzT&L}XjU$SDEvUAY7meE63kbJ8Q|Qd=~)mG;2S-TIwCx+64aGh)boxFdjP0eLuE2AqZj;w5(sfso7wcx~-deexKz)({hJ6 z1vs~~FsseXhZKy`v~f??R^@icA9;^mo%*<6bi3}%)#lgV7(3BOOdD5;UN1l6ELf(> zoN=$!SoY}Sj^k6XONa*?EGdPB2?>@$6~Ce#s;ju!>8mUjZk^R8Q!B4!1Un@R@n)lf zXZB=KCg1u^A&Z0bk*o0{PYPn*~nS?OKVoqE@ePD}A~^@0i99mlC+hn(IPBC~J=l4oF+=d7@EzOjD0PEtJ+)ZrrN zbbz(UoWN(Bh0;?8&Y^6ZZ{A~Go+L%#E4U!da})THRhq!(=gBpMPC*;nSW$4_mjx)B zP!{N&RQW#`Gz@c*zn3FbRG=J*dn3G1>N+D9h8g6SN8gECxmnaO9Fpt#!BTIc>qa5$ zVYL%2#^Oen09&Ol&!vgI36I@}?@+{kwtYA~?VMxdiHs(qjqK!2O;dPNrBWkoOF8C) zuIdrCoX6oceYr%NC1;cpVPznSlj>}y?YN_!4RN=iJPDhBZQpf!@RE&8bnJ_v?(|nZ zp~f1G%7f<$50G6Q4ZJ@j)9G3+OLknzIT~Up?G5zVuvyf3$1QeeyL%#;H)XvV4$jrt z(x}{Cu&^x%Ukyco;k{Y-w)Sw1O72fD0A}ETjuRujgp;t57;~TPtS3PK#$*r3Xb)#Z zOqKZQ9N^gzSX=JSP695QkL#&xhJdQ&v~B3n7;Nl$@^?wjx&3}cfo=5}%HleNoZzN% z)vkGCo$!~(1tafWfD?X`#zAJK(C)@?i0nu_EOqckPFG~xX$FA)$hIM{Tf*5k$2ugFd%6N z7Dw%O0$U~NuO_SGgFP;l1lCW>>E_c1>ey!s_PYttJ-_!@B1>U7r(htZD(ZdaY>{`Y zsvc6vSQL~9bsgb%T)WSd8nJaKNj~f1aD>a@-$|rHx&1xl@zfEb$oX` z6IwXXQZ#oKFdyocbsg@(u;l;r-Gx=cQ{xI<;gv$-U=I0{+5K4B0>fXtgPkKNA7T>> zdtA#{yL9`_@$-59i{sZDiPU%##V%TUkY_f#m^{vY)h_lSrN-rRm0a_lMt!w_*%l?q(A>!(v%|{ zae#laUMg0w33u0a2*0ATt8PBFW87*o>ZG*ID|}tvD&7+9z%=eUSyaDevFV{@x?RlI z=U;>y-W3_XHo2`w-TnQ*v|eYKGTZ-IlsP5FeC;k1)_@bihZ{RrS5jhhm#mOo<`|{r zW~q}@#Tm=uhGVSa z*++y|W|%}_ZoiAEOBreBjh`7x_X&hTSj8MDnytyM41aO58>m~JOy(JD7o8Wgu{B&& z2(5b%J>##d4J}eUKBMp1?-f7XTBnU@#Qd?p!^!S;ghqcT&K_g9bm?6^`H)ykpOIT& z_@qv9ezQ^KHm=XdNqqO{Cz{I~+!RCsGZz+co86iFwQM!>ub>%MhbQw2H4uh_B{?5qBC|E^7aD0}nm$9*$p}vYY z;{iEODUw9kIC7w8c;`dE$0)tx(LN~?2{CjI0+Ug@y(Kht%fO9$%AS96&i*as$;1x| z#^V|kuQE&sV{_J$tSJ<~^sJwP{hanBX`;KIcfFN`Okz0&KKYWZz%~VTLXN8g0^rok z=4E+BcA7M$>8EdNSa;P_>{kcR<*ownvXX$};7W4-sycla=eq9AzWJVrKrT8HUH_4C4x?(4$i&@`3(C8Imk7JUYwHr@0uPsE-mgk~aE| zR_O%06`4yHeid#q|JXJ3)F}8M+^|af7Rw+r@Ky9K#awmmcr7`VS8l>JiB;P(fdXjt9Q>v zAkgT}BiUZPvdO)4I~m2&#uZHyKK95!81;mtroBsSw4$RC)cZxjaA7u4Co$XnK;|f( z&OH8PWFR!RTykCdi$u%S!L+JNcWAar873WZ1)`vuaEB;Qnnt&0&tsV4z$=VtOS z#q8b~=|FvxkVNDCFH|_V)YJLNO1Vci(pfE!!qeAQiIZ*nlMDNI3I$*tBYuT3gsqns z2*&_Y&Z^f%8HusjXf+N{mS!*f+1Mj5;@kEq5Jyq*Br73^{q;*)bV6(b47f>En2e$D z*sk=;601qM=Ob}mSZ)`d?B1U(43e!+FF$4K(tK#sa@S>6%J^V5TdQ;HbULalna7BB z+K~|&)CNsKFn_qgAQAUSvhGbUwc0!>K_*UbNQN3g)ElW#qeWZzl`ctg+!|)PtNQ64 z!I82okq23xaBo<$1jYmWbDSV@9tA>1g(s+Hi~G1Aqer#HtO2l&EdynqCk8}t2E1l= zJ>Cjm?vCgMEd3m@9ZlB_7%aVQA4n+P4`#f~RsO=2KVROOA$Al7d_cN^qmX^hC6JyZ z$SPE02VMcOWH+ERSCHs_6+zdmk73njeym#X^9;rO-FDwyS;?G6tPRp@k4G}80M8gm zxO(YDv{StcJP){@>#*uHJOci}(ZHi&dPCUdD93EBK?696G2OcVBn&7*Wq_HFA@JG! zLNAGX@6MAi7l0tOA)qOj3mU%dp}U@~wT$YicTk}+&rC+7el~L&^-F=^tW03SRy9vz ze&-i1P8iys50O|p5p-eyYNAxz#YHqclZ%$OTm`)e0*HKj^uqBHPtA{NKP-tq3>FNS zq(pb>#k5E~RHxuAQz^dDXgr<5oNb9vvI&2wYmGeStT`HTc>(K|F+Vl9Ep&g=DGj zeG)A7MbIR&hz4+_*v~_smL|h46X?Aj-hI=lNa@D%gjFz8zr#QCqfeA6u`%AN8?zZ3 z6h}@D!FC$d*1=y_P11~w6C(WppI{+?`nhv1eO}+Nk>Z1>Spz~j8Ryf}rZyK0+i!!e z7^yyuDS}^QnV)e?=@sMfM_%A)*&pF0su#7z={*tinku9VCh5%| zO9{ytnQ1R9w7-$}IvNWjr83wb7tO=F zu=6$JiL@8i2Sv0&?mZ6GCIha#t%geA}I#$q3zM8D!N?!az*Ngi$TjdOS|QD~f1i$A?dlHYFDk zo(1iBK(Ccffi&X6QRZGOmsk6K^H+u-XzHO_k=EdM3SKJ_FD_6d}kX6(MhQW7-|Hd{udgP^!Y>-Pw9IKUfMVEkCE7sq3~~JK{4Q%BW+7J`&** z`*eFS;>J(z*laLv{C&Lw?t-@Ia4*HzB%sp?1BO%^b*FwhB))+Xw_m_+YoZ(iE} za7XAik?0%ONcC&%x92#)I`#zJX^KAb-~`i1ntx^Xwt$mC_3&HV$D#dO%qISgi;`<3 zgZkY{_u{!Ue+izK!TH{&%q7A4rpGp@6H42$8?N+hN6%MO!{?K1Vt@4!wy3wbRP9+w z##-pB6={bZ3z6sGx0D~LpNSU=>DIqinO>cyW)5N#O~3J-W{g;kcAxznF7^Clp()So zz~?U$a!j1#eI$=3TG8o)cty{mS@y#fd{#^wQUq~jD)~dxPq0MqODa8~*%&K0ST|j% zce$dayUx%tQaq~MTw?bM|mj((i93!)m?PZgJi9l)LoispAYJdswHr2v?F=^6efims$?Q_0aEo zZDF;;(qNJlOl~TKzlxV*96mH zld~=bXEll#4;Dx<4o8h>(n{iX-@)}qcHL>Y^!K3@M zV0$u$oZhf)x0E-MTYf&0&U|lUZ9F(ZZA2L=|I#i#k(pma-gC6ZrRZT$in{7mWxFnU z;XLNPS)1=NF*D&ENV(o=f4~6e=ab79hhA8sEa<$rEtr&VD+Ey07NyXg1l@&2!pXz-Od9PdkF8KbW607e!|DPbEE9{x^(AwtSj$a8LEm_t3LAv$9 zbid(%SwL|40^o-=w=SQ(E9^i##Ve2^ype;BzXe>%a>N}nyuayF5?$+wW_hgZzEXWe zj&%k~O|3lD!o2S%R*S9c-1^FBf=7XOnU-QSkmf(XdMlU;q&n=(Hy6|2{R+X}jBP0a zR&zqNXzPOCZyGL626mx=WUZD|8WRkt+g^2wQ!3FO@Z0}w1);%bl{;FxV~=5a@vRp< z`AzSY)*2hMq7oo;wwj4zX(f4d_nnpRCLVi_vKzkR>zq>G1OBv53+E-J zx|1F)Rngy(C9-Hlye^KU?_4XdW_E?Yuq4>M(zD9{G#gTGL@PsMv32@-2I{{L+=9FA zuYAM7`(-q6(VCQI<0MfyyH|ht+PtP?+$(jjTB_j*sY^KZ9ST$um9jIQW!l@y3Y~@ir zu1D|LUmYcg^50>Q+@7h|@O%febzSc{J8w9nsJeGFA5y=IBlnD{ICqny(?5wNuvdsB80f{R?aBgrgWixD_1uXXRz~u`dZpe275h> z_Mxc5tpxI{kZrLiVn?N)Pu8B)z$9Pg(=z)$-k*z~OF|xG=6CBgQ;~A@Z-jyI|>noRX;*-4PZMs$;;Hz8^_WAg0@}lj1xuIU}1wMZ3^B0so z{7>QPo68WKFfSwQHyAsL!dG7}=N(@)3lrz=%3-so@Mq2&WmHC|nSAKCg(r4CkZ1^1 zOoU`G!Y}i&JYxmsWA;dEl|QaYRuICpLkB`EKRJvL$jkA1JRu?qV{FV{C1W7aYyC+9 zuU#JRXsZh7e6OFI7F7~H*{m=^aBc5ux|zE;jN^O$+Tn%RALW~fQwKs&CQ^-nAD^QM z#GO?UV>!oGS67?OH)-Em!{61z4<*o{(woJjKGvMNvA9j30|7fC{yUd|NGw?_i^pa| zB05HI3FLur_RCoO^HT_{3j}ZGes^`dA&HG7VIMhpU)e7-MWH_3?Abii(Xg|X?+cS?4TeV^M^C`2KXefG(-zJA50uLe~HS)3&#l3v-t)DspdcWoGrj&{I3<1ievY@BC+p2S zlszr=+#m2^-$pIR-aMHvvz3q9#bo-@90b{2Q+zW=6uenEs_)q1Z&9~Z!~Ddx{(fUc z*VYD7EzRnh(0=N`!tqo(fjdG=eu^XcvycF8GO2>ROtk|h1y{nV zkQ|zRgNDyBhyC%Rdk!wK&;W{8;?VbR5gxy`CO0SBm-6-etuc9 zB37GYyOF4LuJK7qCRQ++UKXNBRu0?XycLnbU%m5~DC>?=M7M|PRf;?l)0fODad}Z_ zVsU+NSgA@=#0qnw=Sa?AhTT5iN<^qI=PN5&FdBMrMEn)QXuNS*EaN}hcF%YBu4M@o6RqWx4m&e^EHh$Ven$19%GnBqVzcyjwuUlgzp!X>Q{w8RSRLXW ze5I9wtRT#7&hJN2wB%POW`yQE_`qynP!YUmU(lk<(V3C zIX{(Kg=LZ*a+6(aGra>n+EBg|dEzJHR{6k()M!_+cyc(5#tT39Uhl{You7F2>WAYS zF9vdo%x}C`x~Hd20C=hlj2fMKcj5YG^Hk{-tFNGNv2R6K~jp0THQkWNn_)ylaHFGH{RPm zWKf8dYeJZOU_HS+Tc|woYyRxC@TKKcuenA}A9?wyeUy1LChwl`pw0yU?;0C@xX_REBp6kMXjo^WI+aXF&onaT_PNJ>)4o_Mqk=xLql{-AqWM z#5r|Nj)N$eKF3Fn%0pCA;EE6w>YHZ&yT&MB%1mgZ9Xa~l%n>7*e%4hy)UPfae2C0I$ znd^Chy2n*$Y4WWfO^h1XvUIY*m!XS+>WmCu9x$0NNm9Kd{nONqoN6yWH zz3Eio$<8msx@twV6rbaz#>!Vk9m!mU>BzvC0h8V5(B|&g{(<@l2#c@0D_C}~k8g=p zXckZJ)*mK6b$(GzZ{0D9z#FGr5kFH(hr$qTULLnJXQ;uiKBKQW8JnzOw~u9M5(6Ld zi>wO&SHV&v{PmlS(qAyJ;)?9yEL=JDC-0AuX(2tIe%+PDj__PM(xWuaHOX{gzFnEZ zm{qB@RZqAp?;<(C^~7>yzgMD6Z(NKBaO~|6i0~c* zq_4{x^F|^!7480F(iJc}L&*9yIE5_#h*L=!i09fgH3qQ_nPO|J{oB(?N$RPYI~Rb-s{Cd9H-IPk`TjnLC?z>4Q|izf?i`lQ94N&_{(Rs&VDEWO>aFUOF{0jF_<|-X%BZ#(S#SF4@t6v&O2j60 zK&g(9XqMyYg{fmXCnXM6TuU{5T@P2K8)n0-*boLH8N0ix#O$Bf-b#Goyzeo`8z*Av z_y?IIMN<>64rp{cp}h_)&5@oCmxYYB$%3}(l7=!V+_qu81`^&B zD#ww7>5_0r!#VKiOzr)E9eMzy3=C{C?=6jkp4jKM zGyS)VS$z>5ff5*&Us{%x0_Uadz191ZP_BrG=y6 z_-bSLC$j_cI4KZ%$;Cc>u8;yL6kE)eiIM@1tPEg(P-5Q%yeeFpfiH*&X{h8EV9%1P zQJ!_QgEVPn5uFmd*aco0a*4c3;=P|)LG2X*Ff-ZZu5kNHfN1qp7!PNFuc%!5R-DqI z8OZI*j0UJQwT}g`2SSelI-metqQ465v0I}N;rx83Hddl1HmiVr^jNLvuG0dD7L;x} z`$bL)EU!U!lkU%=UwsL(siGgX?yVlwWvkZ~NIh&J#E!*!PXF6!0uu$qDqR3Q6HFxU z=M&q;8eT+A@@PWQO6GZ1OSsrF*b$2?2wtO*Ld`8nrQ!$K3d!-VCvMLwW$Doe2>cVK zGXG|O&)YAU3hRT&2S9b|z;mf72Sc>JVa%tc=U zPoDL(0znZ`5k2C!>QCB(N$*%LX+){{p)&9fP5LU(R zR$?u~QA>5|!tdbXzxIfKJZVV5TIvklErY2a&QX?CVMP2?@je^9I~`3U)y1nbIc z>MoP=gX(jlNPeMi=C9{$+I0^=(=V!2zw^3X-0EM&h8NbH9>(3h`Nf3JtcZXAkiYh& zXgCd?SfFa51Q9w$% zK}w`Wq`7nof;57FAP7o_bax5T-QCRvF7e;@eJ_0P`@Qc!hJ$ggI?lPAz4zK{&pFpz z5LdEa4zmA!qj~{JulWmsH^rl>f2}VFI_ixRZ?Bg0zhc>+LG9lzpvvg?W&>|&#e$^m zKmTX;eSL~2M+|KnoUi(lfnB%4QOQGVe;_gIt%Gw=ebLat(&3nKX}^B;ZsAtoGQ~_> z?LH_CS!bB8@|0S>dZd;tGcq*xa+n zJ^H+ERz2R_J#} zkITV9?vFRMLxO5BL%e@DHbE?&BIL=e#yl9)X=>T2w`6$H+f$dm^Zt0>dS@?^*`?Ac zbiJx?(#XF{Cg9Bn>vvQ3uM*{w`NUr+>RJmBYdew+Uh3X`5_(HJp~>;r*YJ;PKO^u~ zB=&w74*Wi!s2@N@Y;L@- zuH0^3worVDPPw_A;nZ?swa-X8&9CE-MI~T!e|8Q=DtydBDqxb#mYeNCA!H{SmLy0m zLqH!_%@-oQ*sk_t zOE5*RuuK+jt=-1A&GD+o!Y8xWn6g?m&&#o_w_HJ5N!{6~a@(f%`7}Z4!DxlkPS|86 zOrp9!gfb2jcZYx~WyNO|ci7E&uHSsj?Nwm9e2iF;X%FpO6Xw>&&PAZpQVNA<$Nh&2 z*o#aIarwy_a3+6iU4c70WjoW+?Gb6K2#c-e43?F}$rcsm>Sr#nvx?sPr)~$#Oe*IR z6K>`MB9@0IipdYYKV(6I+rI{YU#}bQp$7cK`^*zNb@%rGuZX{^gm&qdg3&eNJKnhs z(^;%fO|qymiV^1N7Jy{>#bJ$q>(rEW@{c9lAx>ar0b1is=@ z3VBe^;H*(&hHplq?-6Wty|hhf*jfTGjq8tn{fn#2>qdy`urL~4gKBqmPA-(?Zw3Hr ziB1)9XX3HZivoOxOi0+!Vj-M1iFod$P4NyLEYLApLJHoQP#1Snl}D&``TTAp@rAHT z6e=$BoM(8+y0$DX<&?DyKEES8yKu193^rAIQ%6JA%wdMcqKR|wa~ltvNskZJQZ>OG zW_F?DjyIL8Zd*-4zIb0#-b{HKW9;)>mryC&owl>{$?H*z6A@F3<43alK(Lp^H72QF z>;5(W`Z6Aa{+pc%-LmUGh}k|N)9&zVOS^lpN)n9)*ihw+i7|@t$%lk^P75QEJ&*Yj z{oQ)EEdaVz>JAE6D0@EKc1Ih~{acRyXR7j_3+F&A^dHyPD7HBh75)ee&NsVy?Vc&b(q#}Sg)rNm5#1D6I~*%sjQLtz8#k_Y zN7fI5Z++8?6EET-JFh8*(cuxyqp^f0vV|q^jV;eJs;lERE3g@(GbyE~v86CNB?}(K zUN-T|`kct5t7O-98Vh~=C}=Oa%$AT=z2Z4cIlLQcGhO>F`Tet6Rfn=~y-78nBq3Bv zacb0xc6P%YklwPL$>?MX%{Yz|yCAhzIeS5sROd+hC zyfk4oJu&>GVWZmo!cjT(%}p5DMm~o@vFK})4m0^lw|cCNd}b)t$$s;#(eITq^2xOEEz(i2jxmt8`wT$ zuHK8wJyomxPVq@_IfSM6G;@Edef#zLCjP_WqKTN<^H)2mTl@WRHJ$D0s$53Oc-{C1 zvpvo{Yd?r0=#5%JKQm};4p~puy7^KDPQb0A1^KYMA_x%<%|Q>CT}4F$Iv~=B{t=BE zD;%aF?62kzX&%xr6tX3trjc(d;j_Iq`N7y4MHO|e=c7no&k|nN%j91ZuYZodEZ7?B z=y!Ae*f*vhqCuD6naZW8QM)G=Y(h>c)q-<&qn}jXJ(ZPBt)`FBbX5%_pUJ=O;jAd4 zoR-?*`+oPpGm*hs`!M<=vz#!_{H7AUcC0#0^N97iM2ZBumkzU^pm=;+7^z0e0jR89 zGN4$VMg*7PoLl%E9ec;qvuGSXhucZt}ye&jZu*8HmTxnl67z&l6xDsi&hB?hflBu(%iWA@ia z?=nR%w9AP)Oe@si^N?zLbm8|Sk5xDLoC}&{sVu|Hq!YCYgsW?|R5pqwZq1~jTjr?X zaS<90{6@dV{yb>cD0$B3f{$j{42wAlUPXm+&($P7RI!=r&K}{oktbIEFjn*XL-YAt z%RiTnhm$stEacEtj?EGFT^0uHMYZISj>s>OLHKtoa%ib--UfRk*~&i4{jMq0j;V;2mLn)#S7>Sl~(EyWc1rEn`T2|KRmC7z4DRh@%b^~4HS+o?VAkn96;0f%Sv zE%I6GOf(`tF2oc)yv;5dsX*Jovk4=#=3D_DlkxZr9|(T&a(J8#EMcuShV3-MTIPma z*vm_E%!hmFl?mkbqED_y4T#thGZ-ZgS9g=@xLy9pkp4`S{<_#b#(GxoiGX{t{XP=j zoKh&$^;*@hW%3my-pusq@n(pBR)mlAev4U`dDnR}-7@8i59cWesS%@v^UQ^O35#me z?GM?~zSV`=P)ddn=wT)H#sqB}ALNwvlCkSLlMdT{`{o%I`f>MNC>gIx;DfeiG{2mk z{yuf}nDiZC9>$4(yCqT+9{p_3CA6bqWZ*t!XFtuRSv**Q~XW2Pod`q#7in9c}U-J3<6s}Am zkGjHXNUPPaAuBffQ9!*&`Z1rodw$ML$>ebC22b8-QRV$<>)N+-8@Lxn2h`%2Od4N!+OuE zb1i{ChDruat#d?)W-VMc+r}aK*@?Gm_F*tVdRaSAcG20TnOvUX?5wO?$Ztmwo>}0X zv>uJGA5CC}u6{XaeHSG<{(W`n)s{VE>)nLvzQ&7&YWfVPIK%z|8x|qH=Z%UIbTtH_ zQ7nc6)JH38YiD{3ZW;Khp*}_=0cuT~Z-P9hQ!Y|z_ zf1$9ycyI9ymaiPC{i@q!&V^L}cWX~3{j6&DRPkoTr29|5^iXCnT12a)F4>!O5U<)G z&oUggoQC62Qb20l*fNlQ91`@IC~{Zl>0QnRp--KAl=a-W=4w~K0NON)w{ZR|J@hSl z^vA!Q(tl0T!F402_Xu$Ttfu%^(52`fpi2;{#c|=owqds8&siFgDvXLhYTSeq#xo+k zRv^vtTWsVS$qOBk=a5&rc65H|-ep30lx`xCK$!+X->)YVpJ|E`ei1tA{bQY@CjZ93 z@uogSrtO()$*1$BNY@fU#aqZ`s(NxU%xZ#4AGJMJ zGv2Z;vP@4;69_o&*3!DAi?RCsa>kiWVt93R2@57-OE{alUtKrTKdqXXr(1g$i+}<0 z#^I$?nq)B9x6qM6Y#IaDm0JzY^AP*tgV8H^o&9nGU#ZO&+%A;3ds8R;hfC6I-2>Du z0Rgi-nORTyGSj7BKpI{~lsSPcA{z1L=OOT{JIT`x_=UbK=i~4htvV=?5U=(3{H`d| zvAC^{g)Aj<#Zt+3r|QY?qg)HMu@B1OyUlA&KKF3tMa&r^RMWj?hQPr`wf)lS!@)^5 z3-7{|f!M$24yXjqw#a?V)>cU1&%__>db7Bw`G;fa7A>y(6Z>PY4~89N;>Kk$4$s6s z$_u{A)cqUU`Hyf-jp_!D_glfc@xQ!DFZ4|a5KhYf24(&O4*2V%s5C)6+5UsSfS&)l z^?&`7cbOc>espS4bCUn|xPQ$1e|!}6LKANLBVGFI`Tri*{Lqk)MT7iv!hhW9e|`iH z`S)A?_hbL-A=D*=nk81Ty5;W6?;ae;4<9|@Z+`kepNKA9FAu)y6ncxv@43pZFrj9( zdzfye`}R9(=O~Ao2;4uB=6`#=ucA<{yYq-~k^U>N^?!VMI&TP#7H=0|Y5#LuNFuts zdvaIA0%B=#j5dYw47bF6SA$5LhDMQy_pu_a-n003GH@kn8^yZS^fTq>pQ zkV}slzFoTX>q`CaUmN^Qbw0X&MQ2Su`l#(6)6-iNU$bc6tipNeCV`_$NO=y*l`N717}<5 z;%j7;(=zu1I`$u8(@Dj;ds|=<{tvtr`2|HaX@QNi{GvQep9 z=RzuD{#Ww*kGyym9}VbrmFsjK#{oY(*K|Q5aU_Uf`xZrFwT`Jj=Z~+^2=TsCmiP3n ziTU{vgHmJqzO>7H)AnT5*Ji}6%RJ+E2#^@B+k=-9dF61b`N&F-E#mHz*n3K8opo1d zvOU-Sc)S0ZVct*%WRvywMt^MUe9(@$6I7}+PfSc0`~b}!qX27pA^@+Y5_CJ313Wt; z=;UViHtlH)^FFXC<&`JY<^Y_IeyQ~YkqFT`<>l^tCxnAsr9CMk zR0LC=*`|~Nj&dUQf@4ANDYKKUva3v|0K#v7V_TD1IXwu6QgC$2V(KXz*al4q^IV=E zC|0<^^K?$9-=qPSPZ|h?k*Z(r7v1qZ$}qr)n5_OxwM}PN2d@ZvjP>)H$mWdk@%!In zm*7)saLBUQI;&Bx(k9fY2pl9kHdi(sYy&BJRIb1!?Mm|?`(vGRr#g|-KSG3fa(#|g@gk_hiZtnnTt zc&C9(oXvZ0p-t8Y9V;DZ)KW{|8Gbj!qY{n=Jmq=^72ua3DpP(Z0=CnFz*;=k4||1l zrt#+kbvz1wx{cx7C_tzo$s}L*on6+}#S|<;25CUz`RXc2n`{E!>E!I}>G{dtP~_Y2 z>y+CcxJ@Ggmaflj)fGky03 zR(%NhbhdMYjve5PB55Qr)&TK{K5}sI?DOCWlY3uxUldt=1$mJhMtCWCxJ`&hA=#N(8`)9;>F z9_Ewfh0ZQ6GQdnla5@h(&X##(J-)d2T8kPPh)Fy@1>Q+$~pdmYdZ zaa;GiG#~xu(;Sj0nqmMHM9DZ%t&EI+&>7VfXuHXqgI}Wt^9>BJ&wxlDyMTs6zxq9e zfMYvg`RHvX%YB~h9qXq-u5RL8-Qlr$iTBuV4$PeDx_!V=vOxrJ8;U?v#(Wo07K@qI?D{S?rV7Ws;cPA|YdqCuFPvVQ#G&2HrdXjGF9yxb!Jg8}1DA9r2u zCe;Gf)B4<~lN9K5JGsH zMLk+Fn4m%lkxjQ9?Y&p*yk}JLW-ZdBH~Heb5g@WR#)oO^lq_aC{u>gD9a zOr8Uz`4F5A_|xX|e>?s-RrXmbd>wvcn||C2LIIHtJ6-}xf@BfTyd4(+#U5&Q#Ihxl zi+JeP!SQ2|U4hSFFPSAL>}r7cdpR2D=Op92;jCvkl=pfqdXjGs7h3F#inc{k$Fq7B zzO%a#+xnA(mDb1c`6;xT>S-K%?#AV;FPlwO_VJrab{LWy3Ts|*vtbXRI#^lPYzuDW(r1GVmF~xn}HWKA5)C?-@w(B8Pf|h+f zuHrlEHrPc0r+!$ER|St1`U4#e$Bze6satHC!|Kz4OP1I@@^=tb=e(~YqS@xI+P;Fb zMn?&ihemz|x7)nMSFM&EDe7DAhgjl5$vO3w4A?|23gkkrWM5o;_Hf=M+}YYFQtPDn z=eEW8-0wz^1uCf|Ul5X7j*DVc>;%Hd?_PL?gCye867>Nuu?o@AAm}974P8`?tw3Q3 z!Zy8fwX+?C&se%$CS}yH6-~N$`TA5KkBNQlO9)+h8GZ-g69y$RwA!$I=|TjNpX9;mG8i=zJcn9D1EB3px_!4K6KN+10MA*FlZ@5JIF8o=8nBXc;PKcpzlaG>rK|yG$?Y&CU15~>DIBapLb19*&(Ciw|H-bDO$NvB<_4xIYg762eoP{VG z0mhROFCSCU?9W#ib`KRd@~cN+rnv>;QlRT9F;u7b*+MqKvY5OBIe}W)g~B<`jB$+N zO?V>FAjGe|{@Hqdde8-|DXb$;Cek=a5S$ye0$Y0;?-Ma0TDCi=!k(Az7nfLBkm}6Y z2wb}fze*>Et82`RpX}owpm;bZ8=sRk#W$FtCKG3k$X#-d=)u&{O*f4ZB1c3=@}F_uIUeQGmq_4+Ze|956(w!uibOo0H4eu=P##`-lsN)%^6qKb zeiJ_uNUyjvUQ-v@T?|RmAa`i^bLikK1&%iXhBu!6*{-%`#0fuf3Rziy5jgdywuO-yY z)>1j?UyoylcbBmgY@8FK7Mze>L`j!Owc$rsZxdof@2uel`ZNw&;E4;=X^bSbo%CL-~mDKU|#rTcHIQns5r1Tqs z(1A$O9Ku`xq_(5Y`U@0zs8n-7^3t!I*8BV~;F$9`&2oMzfv?acYM>pUOd~CPjua~b zs{g%}x{qRr7V_`6#qanr`>h0sMK|t4pk_a~7{u$ZjX-=M-*F?lvQp_u^1S{7jGLfG4 zRp@2?1Q|`g;mbQXgs7ac^_0f=lnC#_`VvOYrOHGiA8rPw=hzLCk|&Vv3#ZIH(Di4- zgy9>cdYh&?aRr@yUf7E(S&UO7X!uAYh4^4?y5k2 ze#AjT&}&;;z+zJSr=J;jbv2Ey*r5-^?4|@x0|{j}bc;q`Jk;+w8izr;QyHb@#jdkd zEjU%`C|aV9eym4Fb!NHKt7%VZ?NxtAwMi1Pd*AYDl@6}pCCK8lCDNND2z~e&r0T)8 z$?(9%8}0g}^%sS}QX?Zw$v1MtUL+O_;?#|347T+HcQ~?1@n9PjUdMd~p;FFvIyd1M zspnjM*A_a5gr4X_a!3qTS%%$s2xW7YD#xAFFt+&^LePhydT1|7M|mvmbtJ+Us_$bH zvwvK^Jz6W4{wQ@($ZjUbS~6u5;Z-}9QoP&{-)R3CoT6OsV%`=ni6U9vpD^ihta(S*V6elHCezT?wZ=bG~xwO4<6Vn zmc=ZA(eh(Q!et{D&nqL$ zZzl+t&L(5VrdAyVn(&9J+G~)Lyb{p5#g>9dOPr0uQ-@4)D+JfRm4ef3b`GV;QI-$A|F)+jz&Vap;nQJ_H0S%?IW6RKKFf{1R2Pw{doPh@ z^Q1DYPL`blRN-qgyDJxi@uP-1{*1GYpXdZ(`Ik7V6cz`joxxIleT*kc@&Wc z6IzOT1SR23WDOr9DesRg_W29jZj~*rr4MXrH{w?^_=ta!G=tE;D&Vx8gD5s`!%dou zf>ZU%`Zbk3VXQ|G;p6R2e-|cx#=)>yexPM|wiFEFUVQzqaZT^`;t`#_)4DMk&_g>V zqFg_BLR=Oe{RKk&18&=Gg}m7uRdOpdez$&sfOmaW$t*Ej0e#@UOrRKI&>Rr6YJT$f zfVAvB_t&(oHlq32FmO3xTNg8sskp&i(DR_$4*xa~K2d_S26H+_KJn4e-0+;~TjDJc>yx^A@c$}+jY>vZLOc0?rx|+v%n$Vys)799L2VDj@YP2 zkVO1F6z^MdvwJu9I+Z8~4#^%`tn$x3)CG>)_SzsS#+!I&+?X}R4L5?=?mla~cs-=< z*Edsc_gTTL`g7m&5{l%Kd-kIRhLv)!t_=VunX$7)E6nb>8oU6|%{}b+aBbkob+y%a zG|4U0p*O+_DGk>>0?^Q#6Z=8y)|6t$S+E$NSJU#>gC2x$JV){kIKWAN_;JNgKX zeW}D(9MrLCxx0}z{prDZjf8Nva_h%cyOho8&`sdbt{phYvoTV2kW*lL&CkN`C6%yy z`Eez(=zqG6fOr@l4--ZhJNMGQxl|OnNRN9pT5J}+IbEX@j)y2&9`y@vbLO;cz|0gf z>-pH{kfwjocyK)+h{9PUPp3>lAzAP%A_yLKaUvl}s5wz;edLC-1&jq03Z~0~UU(fp z|8T3ijq5ZEXk%TuWAo%L8V*RJqJg43ZHFZ-W%eS-3^PpwIbAyUn}?Ik$^Df)6+ z(uTK(OF0U;qX(L~CEc1Al!WD2-rU2s_Ltg5o?@NKnDC+qsT~_>Nwxx^@2Y!nk}oxT z?79CEdH9fzeLpLWk$Y8oX` zvb{+)z3DZnCxuC_K(b!UU|$(-2WBzVk30BxW^2Oj)GJ<_>IiGV!5OtxyV`%19~i0Y zVKjbP@Gv_6@N=pZ?b@haCeGnaB|0#DGrAOj*0~nGt)L0{G!EtSck^Fjrw&_y1^nD0 zv1}Ezn~~EJ8}k4yG|!SHRG&P+k<@zGm*#IBjQd+?Fsi_nn_bOp+&AXNW56)HaFTmb zKvj0^lH2BNBl_|QDM_Gn@+@qg)m=E*ADR_`F}+GM&|r?oKs|OR4R!WZD^r0&=*!+@ z1LAtG93tasjtk9V;ypCy9mT{)@;((@S z5VxL@A=8Z?d{#fOzsJLhAETonVD`8=2jXPK;r>zG!lgh--r{lV=;`bA#jh1ky;3Sw z4+wV2z01GW_%C$Y3u;AD0VXxf?>%+B-E9I@Erzz+ZKBf9+437$-&ms--WpTW0UFpJ zeP}lBL!EB_Eb;st0kus%)Nzs!!;oyQfaY~WHrE3ZNipYq0fH844>3XC_MLWQrL+HI zDO2i{Y}d^$48}$8to3$EA=h*cv6qe}@o&5?`7G;T`itI~yv@o^IH9u*cw)FlmZC(; z)-9SoEB7SJfm<{-y0BapBup&5%HyIkEFH>D?ooNOS}atu8G{f_@BM*b1HvWaLS?N;^Hp zjkPzOac5mf znVYUn+ICkTUBT)p1SzdkCwy-YKUCIiVOWWe=EtN`4G{hxqjLuA)m)Fln}W5D#o>Qk zV2R6@_5pepJ@oNhVYfR-GI`^xtKkol>VoBn3!;^rmBR4v3f(Rng?!<;7qxtu>}!_C zZOekCoVq+OrkosmbfYv>(yTIn6?8Yy7Qo<7mQLqcfT9CSS*(`Xwj8fOrHXneB%$y$4fN0-GjBCgYK4XjYAg`q{236qh8?Hvs_hR zXQp4SEG-UiZLkj@&T8M^Ur}tgr-BbN+N;hY)zP3bF^nB^tvbBder>QSf}F2bk)YLS zlj&A^nC=U3FK`1NFCF8hlSplRa9&uQEKja&eK^Do|SgwZZOYK$An(NfVawIcmS zQpok!Ccj%t@Cox0;kq*R2a5=4K}QPe{mVlZ)v;CRWZ7Vq@1jrk2rA^RcKfcaojDMa z-hY{wuJB>n)Kv-#BYc}4DEDK-nFk%B>3*)jDaKPr{5HnyUd0D7KwqMC|2>P?!S@Em zOREmw3zLr$kA;u+_ai}>RR`Fc7C{Z5k3*|Uy7V4pA09$aK9=^)7HirqP$N+jS@zNI(v zV`5}+w-BaG?Zh=!X{Xw0)nd-Do7&~AKhfODIoOF;RDwk>k zAUU57-s@XDZy6|p&pN^=wnXF4>Z-e(wq~8VzsYeY&DY4xff3uR+AXCmk5s|KgGE->j;JrgEBNxyr&^aH1>8`_ zYObgnBm>B`4kkJmf02Xy#^J8g1NRB#uS%a=bu6hHd1&8==$8~oQ9q5orx0ffaT9tG z{`+Z)+6o^yp_Fbjy8ThoK_mXW$0xYRv5Cr69#Ml?3QF32P4=@|kSw&`%%`2YXY)t6 zOuC<Vs5E7p4DJFEe3YXbe7W`EPCH?@to@?)w^8EUa_V;!H)a!zRJng za<5u+dj72P^CiGY<$CmanK%aN{B$g8&R8@!RuAJ%er8`?(J805M?U%f$gc~!PA-)2EZw5Wu%IrUX?O$#I9pDu6}ms^!7fg->H&)^pFXSkm^M@ z6-SZ|91w(^*^jD!UMN6Cf}6u`YY4My$i80HMH(IaeZlVvZH5Eg;tKhZ~eKSAsg9fCpj-0HQ432u^LA}}G=57+* z(|Ea%LHP+aCCZ%@lf|<8Zz7Qn9bmqugF@GW#de%oazsnPIUwYWMTz~NZl&zaeW%{%R!#%G*IC(5#XWtNd5cm%9lx)QE^L5XUI^|YhK8XZ*Jr_K&!?RF7 zy%qQGI)UF_=nk*7ZKDD@!)5^IgsFKp#hKVm1rK`1-MH35%4`7#xk2Z z;SkL@wJ|nG;BQmn zzh=u0E2`^kU2$31O~&6da2~1WgUucm6!50bgQ^08eH9tt%w-j0yafl*Z#-;jtPoyQ zCgPYG>UjlQnzNOkDX_6zQc96|WNW~Pt(xWGSF+PznL?)!-JQ_AR$F{IZsxag4xF`A zgRV+0*;8u+!*>t@#PPl$z{)I2E72MH(3M(gs#E(IU9H;H6H-`VRs4UZwE}WlD@;Fn z^ao}zO%8mKY)31f)>84x_A_yjJMOmI=v;$>4$5C{&u<{aXPK@Z-L&TYG#-23(t}C) zQ>Zfw-Z606>zMS9O1GRqwR!kM&2tMom{1@Y0Q7oXW3>8f#T#9{uw<;p)i_{m1bbZ; z9>wsKrZ-t6M#U_AwDWO^FEK~*L>fi89tq)}+xFkGl0QUM)r9CI;#W!K@>X<6f*ky* z7DBT#ZW}>+*w`$BRNLO`J)T08b%NHC4xisLr=C}6=fk!eJN7kQ0#bNk(vF*BbXVUz zZO1vipYM0$bHk?b_7}gF}M1rB0>}z#H zF*6<Y6{R%1Gec{mnU~OE!tS z=5Xzi@_cLXmG+GyZhA=;2W-634C+k>Viaf_h;e=9(HE$kaFmsthS?r6jeszfj1~A z$7Z1R!#G$hzj5=z@D4a!hh_h?qiWP<;mvCtr?^RRF;{+r0^U%28`Kkj7daXZ*T~UK zop=U}bHhun&y>Mnu$GAl9iz6etq5){>0K;xpdbS2FrCBtAl7R`WMMim%^BMVjH^~8 zgFG`3A}C*(xg1@60A1<3fG&m|={<-;%DsAsv=G#-b=TUVrP@z_x(s@Ou&)w^<3k1J!IuS{flm|tCWMyvHN2HY*Ed6HuwE? zHe92!5?rKsr_|8lmIOwj;P~f*5%1``WgY2D0w50%w?a zdR!?H5DLp4q@>kq3yhhAj6t!;qm@Gcxk|2$+G3!4{dsLBz~`^n*aNAjos4h}cRz_F z)^2tyVRS7a8AX4&4cW{)yTix5eB+EqjtKIy(d$apTck*V0OD@5{I})d4IHWFPeF}4 z(gy$y6(N5I{mA8DSteKe`{7lvkMdP4n@&0adn36`pI%(!Z$1DBob=mUOh^xbNIv@) zdYgb?Uku@>eQ#TP+R88s>=k4$&o($@Kwf)ta?(DOtw9e|NBy6r@Ibm1P`6y|yeDq& zGn&k#!oW5w@rmQvCoj1q{vn2+1{JR#lkwQ(#7eudjun|k0hL21fSgQ#5oD#6$|}G| zO@Yj0A9&zF7~+97UcGLS^^}aUZ1>+J0P?dx6f>!v|5psyMe(MU3VUfsI)60530c=E zv$`6Uk<^v3DX`pxcGuNZ_jIM$g ztDq$@xuEkiA`X34z)MEeU0v!Bv1(F7$Lc_5b{%CoGOsd`aZc;;2Q@8=-asrd+W)*? z94OY70C$bFww!R;2oo^RS*!S^Vx4YQ%8T-Z9P3}#`7R}aR~(P{*Cu1m)#D0MNs zLk?|^z|fyN-Cv3V77FpQui@KzT0jSId^lZUpSd|xXW;hI^RQ1UlGo12+w2tR7v4aQ zfmjbHq4HxFe0V^Cpi7DL%{kKP1L=jOB~uov>7`v1shU>MfSV~ORt?}lA3)D?r2mwG zPaJRm-NC9tpop~}^uaQVYHk5I5Hdm}@bE6tvChTIlZ9d0pxbn=7B#D& z;5Y^88SMPT&Kxx6RzO3goaY(Gi6Ec+rk2gHHjwG0D(SV-kZRQOw#fZ-A0=OaKbW%| zSXxCOtpbpW0zhS2oEAu<<(~m;ysO^(+C#=Dsx5R`=e`B9ejlz@@sGTAZ;AlShqcWV z>(5De;|4K%PTTd-P)Z?w(H%FiC>@b*LVqR^yKjN0)u3>e^7no1zqh|?V)O!Be!mGY z>oy(^(lm;5);ivl4L&2S&c_dcwS`fjDOCYGh<@OCcM3PCGZmyEz@rq@3>gu*Jo!vi z1au6{z()VQ$HkcpQqyqv%xMP3=zrsOB$#a<(oBIDLO<|+TpP|!WJdtzBL>jbnr_93 zl0ec>BRW||2AZ9EoIXwwKRFK}=BOkf+sf4Tf_bK&!a=P&OKx ze%1kH<;KIcI99E+kw7T{a?-{T+Un{;5XUSSKv3*U-J)?dCO|nOCXtYKmGh`iI2PlQ zyXSm%_|*#^CmGH;Y3$ZS63=Uw24sXc7zAd8LG$oV18%upfcypE#)M-7F^~g)VZ+pe zOXj&>b=_VJqImAO=>NLdoO>anx^0zUh!x|&y(|<@fPl>0b{+JieA(ym^OKklENF%k zGNpNkVvV}=4vSKn-;euue2$T5d(F?eG2C8P=Tze)2gq8h3WbYtYv|XSLC}Hy+lWq^ z3F;u0?JFmosO!|Bw7TbDSD}9rO2R(@Yy;j%JL~dTO9eTnd-K}fMHMZ0a^kk&65fFV zF%HMVjQ2xnay^J*knfKo1_cIby%lHIQV}aDo~175pLggMOiX5}NfGMi`8OCR{y2lT&30!fk0Vyj=zO|Bjqd zKGRz1Ns0o-x~s3?40r3nn?QTIzE8eQ!9Y$Ddk+&-BJgrdeFHEI}qlLyBu=F;9Yd~rHerux4@(Vk50bM;hO3<;szWy0& z8qO?v+BLeT(e07_SM1wVIMc`K_u)NL_t1x{Cx1U-{FYBb$icY-GmKc}UuEL;0`m2K zQi1JT?eCX?ATeLB_SKw^NdD0X0s4X;ey}{kNBdTFFVK+C0)3_DmRg=JUuH`zlgg7v zHk0=>yM%$0luyC2=A&8pJAQ{iOt|J&0QO%|4cq-scm;q1*kFsrDd3TV)^no=b$bQj z><*UI!FgLva0$5@YH=uk{a(&tpwghX&_w3X(APli_3Rxu9`Lcvtqm|LTg&ZIlfo<&HPt6=C%)=Q^Ki4^iw($9%kdN;5JMn?FjW%D3VW;Io&vR z^r{@q_jmy&SLqzo1ClJb#!wU^>QzcT**HZqd_|Sl)j7nhBeLZfh#QlvJ5W6RFP%_m z5ZU>){mJVS&SehdB7x3!)po$R{2a z9`ynpq$ya4XZ$^8-SJAG`LeP6-FWDGARqQzasD&Pg9|7(IKqgSlo$PBZvs(4uk@Hw z&C@+V%(0961rdno-(}J$`lgz%J2TvibOy1p#+3FJY+0JV5a_Sev4*h$ABji?wI>}B z5A%_bgHh`)HkLWJevOCBiz{w1T=FqC09ZX;k6z0#{mc%~HT@{b;q&jR%j_TN;8c@Q z;QRnw(xx1Q7`y?zIac9RoHJ3b3#>QjL9r@V+~M$$gQbzBf!as8;5!1fHnL6pxpc_V zjC8l-D_U9g?wHSvcv-uj?*iBP_v$|?Wz*1Qtj&MLqrupwMu;M9yFr-d2EsRxZUw96 z>+4}xfkplvDf?pJu^g6r@gpIlsRO<>p@Dq~)-#dc2V1ZkOI1DunscO9^cJh;v%p{} z7|*+9?++dONZkt@iDt&b9+dmAJ9aRA8N_=#AZ0H$T>vT^MF zU*zv}e7K*PgXH{HKr)x1zcH=uWy)yS==YoE=@lI0l>J>eKrH_RieIla>LQEZFzzoM zRtaMEm(M7(mtOB!=E!|60A=M+3$~1|?hp5`6Q+BfE)nav%{K>sme|K5=Y0koZ&G*o z8rMF10?Toz-wqGbEU7{0YO8D}{moi`B^&Try1jT*0x~VxFA7P_B(@|We=B;zzi~o- z{m&J_jwR@JsrpSdizTLOI6AX8`DGz&eN#z0lml3FBwekk*iIzG?s|w-CMN|*SE}j* z3k_4PQrB7>lIh21a59#@v?n7jl!Dcny-S_?qOCXyY{DGwCZ`Dorp+h9+%AK*1WZOI zd`@%Gavz0Ng)IlQ-V!tCcaaKjvwV28?4)-EDtJtOW+el=6hSeU5BFcdN2oMLF6h-U zhim7@_XYw@JN7FolbR5UDwc{*-h+zRwMUQgMxMAjlC#F;C&i@@%SWUvhehar>;2m= zNdVbG2U-1>$NGLjfn|?|KVF?}lSsnBRT7Fh7Ww`qjq|lW_`NZtHSwbg$tso1oj`+C;Ei}|bqXvS6 z{k=9S%RUOLkEChW26J^Z%6Jr$1(kEPAD%8oDWVe+ ziMq#bP@BU?y^hA(Nvr}=y zZi`uQE}|0w-dE&UG-CBC3*V-QQ>4cTs7?>8b{@`pMsmAoo5RQAD%T#~Ay%J1ddBpz zE*c4vBf-RgqeN!?H3O{m+-MDtX>$LVOjo=lGbDNpDqKH2G>o}yz-5HN4BA)pgku#g zJ=vFJ)#89H?0f5~N1Z2z2M(0yrzw^C`7f{?Y7)Y5W-k^CO{5baySfjE14NC+!SX>_ z#^Xg4vk_~os|l>E{CM=AZqF@Axt>?%VZy?1-w!+7=I)NYXk5DAU*Tj-%JU|fPB!vs z3TEJz+oPwUt6cOmS7TL#&ZJ$J;R_;&+I*}I0-51^CfHa?vEu132aa!D=p-v^mpo1D zf9f2hj4yPTMz)hcOL@#G(s;(!ke-98uf-;lqr>MV`eG ztJLwq!hM;iLo6bcgpd>TEDcrPLFgy_i~wdty1u^|MR}U}iK&=!{)-sUl{N#C;HqjF z>U>@GU@7Fo(7F}wC)hXQH-$zm^OHYPB?2dl(!ab8w-2nnuA%Reac4n~X&t^jwc&b_ z4R^_Uy*n!ghtcFMjWaMacfRY(+ncx+(xdnFZ0MR0lj+sv1v@ombzS- zf$S-YcS%?gSjPGsF*7Qh+g2lv5-$rT1Vl)TYx;>}zsIF`%*1Wq4@|6k(}H$qcUYws zISi@wC0TN9?MUbdqimSxHI?2~BL z*rm(UiIitb7~aq5D^`*t-_eODjZ`FS6wHb=`L;N)pV5f0xwa5ihi~9=QvH6TyJ}vy z&LUh_Ds299G;LsVUxSsZGY>)%;&%|CDCx-68+jLYV(AHkS*MGoFMc(%V@ z>b6dFU)vLye&v<}i)K}771{YY=c~T&6LOya5V*cM3cNWH4R!f?B+hi+CV$etzryyC z*x*g@)@Vh`^?lGMnsVd)?XIgR>*w>)Ts@g>Y*(*0YDA2@*t9OA^hQcxIa~4GV5ol^ zi~suJg$|ij!TbGvP%EJ=b*h$(*HRw#)joJjtp9ABh~uJReWUJu^W5kCbnl1v!~7-`!^uATti9I1to2ak z<;XjUxWV@(yXWzW^L@!Gl#4zTJ5PQOF)j0Hja&hdq=cOv&uc0P zWV*?=CAX`@HJD$CEP1^S`kZE)yzUc7Jy22g(W4>571eXh^{~t)k!MPSN6)Ex4W&(0 zcJSzv-`u-A=3NU=eANfK{-0fA{eTr8Rug zzqZ#d?N~@kHhOlO9A0$?)~~;E?i%aU-N+M&+>tnzseu{?-*M75YpuxXgqle6P;vcf zX_PdTr<6YCn|^0lr(yP;vwQoSz0TcBFI1%*twxzq+9&HW%MaC-pZp(vr!S_%awBN(F9*ZmzkbCcq&qj=Gm|_{>!spJ6B|a1dk0)(=OS* zUHw4(y7oU`F|n@eU2DBR==+sAu|*#B?AjpE;ee&7wvWv>*;Yj2VT>=e&%}&JP!zzVv8nf%D5 zvCfG|wJ-@wFaqXr{$64)7|h>SYdDn1;B%)B*R-H}?E6+(wY$FWePy{#LN|Tn3JoL0 zzODX{wz9vg0yqh+!_17D>_;5)O`9@ZixX$MY&hqch|j%}zes0^g<5xbLk8AZjor>8 zrTYo(Gsuh`eY-q6KwSAsH3^=@wUvGlC`pX5sCitIuAkuIS@d%BZ3)A?@oYnqtb}E) zN$XI_kR;y0cEMSXjBaSVK>8ZOv7Mg4v18$W)D&(Jk7?&|GYb}8N}QqGGRsn-C|Gt= zifUh3)Y$8JU9~fEnUc0-`W|ckc8}moe{=ue$`73=-jI8tw^*}@B(H$w9PfyjjSgiL z^5}?2w4}tj7LS}`YziMDZ18GzaqD?G*CAt5Io2K0BzsmxXn=*y#N}NQN_6OB^s=xr z;l;lAKxIq{>huGFJjhdxrFx#x;_f~jSIQ(#4T*2H{(3ATf29{4rr%@Z$mO-`R`8A~ z*2(O7KE*5R(INI`iHVp{`$xMc-zB3qdNeilK2Ani`R(w(6^p((biVY(2Z{uf&Y8{QRIo*I8#NJ(N+2(5A5Sho4jngtu<$%(u&b zqsk^cpD9Oy!3l0uyQHtC!SezQmI8?<OT!Pt<4Kd3%y@#=l?9WK@->+xMWT_2Z(+USzq zG^q{mdYfP6)(f<1ea)cuU*FYPNSTf9>{q+%`=Xc$f+qVVg%6V&SRwb9e;`A;( zbLdT-2QpI+X@K?yxA5>-)P&1qe|~$*xW6K(-*m;6_rZ4A+Gww-v&H}{fctjZ*1d9e z)ngrR%*Zr1GTZ9Zx9Xd}Zsi_R^TAKgkGPU`R{|rB*u5(DoHhb4$R<>EosRhi7X_!7v> znq>#q{o_T&+xQ!1Uu_33%=oKnsY5to9dK>;N1-gfL!avpc3YUS$}a{|WO)Dxr3hna z0U*0bPQ{<&U=Dd)dLc^gDd1fznDWg)z~#XZL<5+@CSlW>X8#rHe%p>5tEa*m0`8Fj z)2wx~=-o zD^u0dN5F1Tv_MWB50WLV>$-2XYKa>OuvRX5I(bk9s|MwB>tSxjqeipRj zSYw_;k3Ar$?rWhXbg4JM53|iW8tu0??(ULXS*DeaXV)oaGq2q+r=g}WjW3#zBQpDT z6*wiBF98)}DXbAagYQ2N4$oFJjOZQhDJ{*lZmFsvy|TD>KK$^a{;y}XY0@K_9-6Y60*Xt1ftpa_fX%_Z_ zF(C5vYUrEp06QcL(3nm@m%F_zSb-T(O>pLz6O_F&mD zt`E-+ykw7GI~$4GzY>ZkO=tm_=U@W2YghF0?fG+_IcNAu>92R z(I7l8^saX#OozIa0`xTt@KfR8Md04@z`?P1(ZlxkkB=bar(6Ij2xtEBH}k758+1Jz0ltI zA2#3_2PQH{PpPl(BAwPV4&YxtINgoFks$#*n$(Bru2FEdJn$rZ<&`x0qCMlg^tCcU zfCi5FeBg%*N%Mj}b8!P79=+usgr*L!IJO_zLwjg@Yt_+Cnj1|Q6aDMLYbUVWW<^)WpK0UN=l6-Oi;w(v4uxKi z9vksxY8JOXVZBZhuYEGqTN|ImoV-(+pvIv$dzSEGLwq0uRZK>=&L;-8i^5`5{G>p_ zx#xYeZAf<9J`JBjLQbyZ!H#2>fB;v2j z3}O44UJiihIX`shM~b^nh|5ShCi(i{Co8C!t_Mk<#D`*>^Bp?vZ{Fj+FvaLXD*5f4 zsrUAY8HES`M~U=vy3Vcw=qAd@}&^Gz~kmH?9inpLfM_&v37Lx7Axk$dsL1 zL{rE#MoBpM*M0p9=J5~v>epUd#|&rgMaRuYS^wn^{N-P->lJ>nAyVG6k>s;z*O_(s zbfk?<)LhkvN4v*?01tBDd8(SJe1a+*U{x^VyeAXpDsBhE$uT*(TdMFr+UQ;YKeFK{ z!Yw^$-whv;OXy)&9kuv0tI$CpG5->6l>cDoD$_W{ItN{YOc_?7{lIrhZ z91RQRld1Aq9M3-*mMwIURaZFLqi=nxaejuWd$%j{TtZ|%b>)&{%aE=zM@XK1H(BWx z1c7!0eDSSeVUi_zylhF*daFPt;vIq&7m^l>5=$R_MnlULbBI$9rVsNpQ!^wd=V1!* z1Ly5q;+6cj9lH9A=}O#Pa+w~=l;?5-JYm3sT%E1h?ocrAPmKo@q&5ERX6$77T05XE z4&?PiOpPpMvhJNjMj6urdsF2*>!@D|r&$H>5&!a8k&o`^!+u4vR9bpG!~Vm=oo*lZ zhQ)U?9@8%5Jqk9fZqK18xA9zJ2ROaXbDWweUGYiPO@5pU2Fh+TLEeWYEF=&_c7p9{ zgm6DVS;QZPQy7A!KTRj`LIMpB=~(-rI{E&9u$2X3=?S|{N2XmeU`31JRMOa4cQ%M? z2D!#d5_OOFs^2FTAN6H*Sqa{8tgo~TQDMQFTEM}Q2PAe|4QGZh+ZXS-&$rwt1X^J< zecQn+lMZ!&ghu)@aVpF_tch0W6w^)O5(D@Q2^_rfY>BV5Ag z!@u}sA|Y%veaJ2&Iu-f{WkXt5Xb9~ma^d@hLX|Q^lm7HU-_~Gxi0%97bDafFmy725 z?$N8C-TuwLba|mVqj*XU+v~qJP1&Dmq5) z9J^l7Z`V`OO`t(pUdDnEJwOkP|Z%dSgCc>Im=+kA8&1$0_{K%EgNEc2ONK6z2!G13cz@r16!=KIU8msUY}5Kfya5m z8(DuO9Y%B^qH{PRgt&XtCawx0&cY8Ny%RTl6@Q$Ob$>{*iti{B^BkYl)#asm{rEE* zZQ5TU6Ig0|-;k5ju;~j)73#p|=K#`f2#366oE$DH36y|`Dq(h(6;OW8<$5c%-kTwR zbmCxd=1Kt>)KidmA!pPWNUn0gB44zSKE}w4_PE%4)!v9&SCnVK?tKWsA7)?L=u3Nh zZmr>Lsc69xSnI&*Ep7I!@Btu1+s98E+rM#kpp;{Aj=yQ-x)S|s!fDo8uKuzi$=Zr9vn?47T9 zhvMDRS%G~pdg$fTQG&kj5P_z}-(MehQVRPlpP<+@;(Zk6(8%``aU^SNp;*DVmTEHvBalW~!GV8EVR^29 z_QUSr0-7@QzJRQKq|CMYvStRgz0I!+S(i2+VPf0k5p>c;`{b<+xt;b!HLZ9vN?E^x@r|&87-XJ&G;cEPOQ2CS4F!KMOugyP4sJJg@odO(o2?GPKnCu@kQ= zk2sKQ@x@bjk3S`625eX;jg?DUNXJAszZiG5rT1vxy+SWtw^YQRQX)*<`l!&ygmzxw zYqzsZiY~o@fXolY#%S+X=QvXQf*~R>xdD5J{0Cp~9$j4x3~geZe2468&K#oInc{St zPjW;>g~5N?So!VMq;kWg$B};qPEp5B|3XZ1 zo^5;I(@I(ipV!1!@2ky)RWMR3xMXRndSV*KXNyrCO8g{mU7Q#fW?%4mO(4%#M~~nC zwn=&=Scd&$SmasvhA0|X^p^QgtnG&eWA8fNLQP^4t4ugg-5u;>q9u)DEzk|I*DF6P zN#uMB9lczX+(a^Q0{22bY^vu(Lw4q*aJ;x;Q zyCQkxT&uA|I~>vD2PKm#i^%s65{G@ruc5V7hJ6ZeHea9%g{06xd{LMzHy(64qZ9|F zOJQn{@P)`s_?_3KH7O_2oYqlKnAod!#L_y-7Wlo)@sG~-ddY0kr0cy5tClMIWEz8M z6*pFf0=8>~m0E#Xuh+v&d+%cFKQ{r-RZAEB?r1a?tCM*~MT#frG=8U5h{Z*SVp1(s zl$o~$JnJqo)iVOa-dmivv(R5!usu$W8w3T>B{gW~_}w^6vv=6?}zN)rrUTi`KpTYQu+K zzG53b)DAMSiRCrc-jwY4*_Wj^t%u|NN)*+}bgj4k$^M;?v@mhLU(IEFJF53+K?=92 zEJZiD&#Wj*dYpiHBzESZ0@iKC>pbi*X{p={;>nlL7I5OUIi=E+{^5mS7y)ex!^WHl z>!1MIc3G+T_HT^c?i_Kkf*+f0^bEJ9pzs3Qc|6PU1GthL)?F; zx2Au-Yduo8OJyc2C;B8&pd>EMx_MCYn#eZX6XHqLkxzuN!)$ZnyMt)?lL72fXJ&2= zdyvcV=IMRAMhVHF+~ZTbgdjsZc8&fq;t72ehamgQ$j9~Y0E-UdfKs+U@^81 zagI`q8J2NLld9locCK>Ehj1C2NSb6EcEZAE-4fPw1Q%9VMtBe}mn4_aOSn4`b+9Xm zRH5fm%2Q07WG83gKkX(t72D0AlWczzvzEZE5ogOxp0L`+%E+?I`1_p|GtNu12}w{c z;oCQY4G6s1FeFF7Cp#r54vG5Vg^Co_J!4*PTBK=G?!mLJyPH{NmnQQOo^*Vj)53D< zE69v!ilg2M&GX3(g?!Z`4v93`ru0ur|B-h++{5T&b#4<;NgTR#bx|EPjk3PvE+ z(ov0vwM9F{!@sMHelwi6AacZ6Ja*^C=2X*i7uM4}nv-`c0#S~-{uoMJsVioO0;ZWN zaG&DvGCxMMPE9b4bkq8F-?*_=1CNNN!$}_M>@;RU{9&BS8#((+_n0^UsyT807GJN` znYH7IAhJE+hAZtyTA``e=@HnyPTLx#xG8Ky9~8Y=6z!A&=c-2H3&b%xRzf4g1Izc!Bj~ z{*5Nh;u_WcV&q3jz)-}Toll|8yuF8!-XCafVm;L374$wWr-+Q}vv5i>dHt#;29zj8 z1{oqXEZn_NYP{Oscaor`2cqnUeU+#iyL}?hJGHuGpR{SC*4Vdm z<|W+*Pq<1pa}4&j`ps zlYk~{e93N%VQ2FPqRns;^NGM_LTka*-fv>I%t%-p3K*;LDHvqgl-|Xp znouJ>CG@o}J^F_g=;~S^=tdBf@5pzc1mqxn1L zfoi0!^%!5>ucRR+qQ$}zx29h)pnbEmoeo9p&Gl?#4y30@SSz~y+TrMegDOdft(!mK zN>PLc4BsKy%y+0n?o3TCS5Q?;*}<%m#I7DK>MK-K({l56qs1A>H?q)mDlHB&N3|Rl zzHkS*<4aqV=rd112U>@d(RV!Y_Os?=X|5h`_2Fn?m*y>!Mg?`|Y#zx{Vy0BkplzlL z;41jY^C{>#|F@W=lH?7;aakFmxhfp`+{1~02Yq4NLv{8(LD5=R#G&UFNXfMQ98Gb= z1>2!eNC4VE`FyS%>rfCp2T#Lz@z5WNhtSyZ+=-$TzQZFso=TfdkWLfEUA;n~vV0pA z!M9T*@@Ruh>~!nrRbb=ylK-*r!vd+ZA3JHD`FbEHKc|#8d}}kc9t7a14>rwmY6q4O z5EL@N5hl97=ya|Z;O9~VJQD|-gcnqo2?Bv3A2!w-G_YY(cuN`;Qh8$}GNl+7SKO|FfW5oMxxdv`-=P}WXMG;td%wf)|!r={>eAT9&1ECXKe2M7G zb19F?pmo{=*`_yZbGUvUBW{xDC@i+{TkOhZHXpcu59__}QQ-dRj$_OG7+dol%(jDg z)aKJ?3(Ygvj2%2dF4XO~kx#A#`SeiZJ&PwU#grDV_g^&1cAe zMz)#u^BhFz{`Yx#7D0wN&SnE7p)^4yno;;_SQF|rhP_)#vmAEC)!pYic)`#$+GoK^ zw)i%tOMEdhj8%D?H3>^mpheM?R_22TYNI-FbTEi4GIPHDhy38A(8*nS>sPVU{8j(& z>~x5jX_f5rgQ|q(=Ft>rg1ml0lR)8V(>6b%d$y|Ngk4>+vv8)x^cMAx7+iFm8s|7& z$ZaCy{_Yrc|By5kd2b3yo9)WJygfq-XB8Ip90(VMHen@N)sG`Ty`x}5b)jhkbMO+A z>{13H?G-emjd<0-a^$*t(gn}Uqt^1hnyQuh8Xq(*0AL#o+P%Zt^Tf1^ZIocLe~oq_ z`n`M4roy4G-T7aN@$d7Mp5ii;)rhIh3dXb1XqLu8^xlDQPmJO=s0K@fS+LMIwTg8P zFz)Twhr{7XVW#o)SpF_^1a(7!0{nls&C!U{g5HN6d8OV4DLPwspAoe(#qWAgwZ$K5 z-haWes4lx3eezOL(#{KN+ysYVZxw#^$5W=#dmq#&{sO&fl^89sI<{)<=jz_O7mj!4 z8Gqh&^T}_i)3dIVWOAotBE{(w?Y83d4=vZi%yUoDL5gdy^JETsG_LRb+LGD9BA(i` z&DL@y@DpBcTB-T2i;Q}`?^r0g!mJ{FY$O{`?O7aEbO`TPf!gQcyG-hFcCtv(I7?R% zK1MmK)~+_WY|{04QZa#PnB?)g+%ly%UpCrd@*v?t(uHJ8Uz2jIogiuwT|Glvv{k%K zZeyYBeLl6fWbtXeLNLYl@pQ?So@IkTnEl@lpb~GvOGqghf5_n_#QODToVQ#T?$(N&QdWdDy7x`8riGMEBGBK5Z z?GHRp=sYWTFG>u}YAO0X`FVKMANp>$AppLb6@_E`ae?HMyr+B{k{*=-zSRBjnDyb< zi#><;a3DFtFQ^cCrHvADCQn2YeggGbtcNe)!?X|2Y7c$~NdbMjK2U`)VkaflzIwuQ zcThp(Khv%}rbma)n06FiKm7N<@wY$u=a-N7084Y$B<=p+P{M!uQklFCkVAgd?A?F* z>EFJm{1^au;XC(2{}&4M3_pOS$^BL6|LK<>0~fZ(DeK_(94TJbA4tB0e4RnBfBomX zbfL)jgXAH#{m+&6|FRAceL?+~zjG{36j2^$dxkq4y83CW4V338JKTXDtUV!s0nIH@ z&V9lbu)ZMIVny$Twi?-<9X2Ibb8LvU(6v+G`nE&={ukASoUfQlq3(TO7t7s~kSDZ( z+vj{8oDs((OmQFcV7KJJB-r?>tmWlJho=4rhZ3hnC6CG22#|T_TYPv}Zj^KF^WbS! z)ppoGl2HB5LX_{Y2s7Q%?*%2r)hp|7tGxL)4VKU)zynW@r4PONc9mzs%V55-EqD_V z2B!ley@M~E8pZ>ij4KdUzz(rz@hf_@v1S7H-D~DUZWcApvwbdU`05>$RQAxL*2Ul6 z;U@5gZ6Iy6g>VEOHicA3F7rRUc=>W13P3kTN6A!!tQWq|_qj;Hl4e3WZ3xa#NoW*g z|GM_{BAj;N?0Fzt5Bn2$4Pa%rg+)h{%;I_}y7#>i%iwv7r2p{ox6vzElQ= z?`7u&b7&d&6gpmywq?C!w}rIgKt&)(_w#{D?u1}^<=z&_>*Y>(_d z>u6wQHfZ*mFfK#Oy}|*u3ZSk#?TrXsF`k3lMggfZb^vv`eGz1i<)wJA3l}&yyA_t$ zcNeyU9fWKa{p=2`S2(5xs~WThfm&#DKwXW`eeEahivHJ~$aQ-sJmYKD{?HZ*Ninj% zXxVI<+zXzGO!-WCSn^f?e-ZlJ7Lb`)=y%nLoX`1pF$2C+AB8j4mNNBq=qpT=E>0ZJ zH}Q9+eh>sWjAPrucLH9MDp)#|*nN=NhH^yrzY}*{fd{GsNOlux-}Kmd*>0C71SsQY z%hw7TfKc8JkO})v&6VLUS2X6ZRpUEcKCN}Tl20*$wn0t$6qHk!szK6hi)6#TU=wtV zNH@rObHujI9M&?*)U`$LDcD0-WQ5&H(^fHVe+@re$3We*dkF1}`+m2Ll@-3UG#XSUgcm@VX1Z6hWD*^#L5kO)aEB#ureYWj#a65rUvT^Tn zx@AlQVBGC;T`H{zGbAp8cUdgI+_~t!<8a&>7BK*NU59oYP4KQy$wFTR<5SN|#MQO@ zJF5{Wb3+fVykVDi*~WU90#MoYlPnM&YHEmoU4Rqj%}H8NJRBYc2|@K$9`cSg9DHA1 zUF-Jf57LKpOf&V5$o%UAY7t=30rb8amSwQD!95VBAr$_e&eox``Xm&}f#alJ>Jvhw z!T0?c7;(kGevC?H(h8Zrz#xR=(QSD1;>Ne&hp&_J%Qz2K)@#tNFdytz;Q@UMPMYP{ zWmq(|@JkRAJNAZ|^hJXR;~HpAT&kH?wD6H2PHbc5l$`Zz#` zH=A{ibqchC=oPj8m=JB~S{Qa#S?LIdIKoQn?+DJofqG#luP@MX87j(-NBp4WV$sDl z@PL&(>^!jfR}uj-ruw1wk57b)>Sn-ccE`!U;%%d)hs9$xYeRtEIRFopDWo#ZE$m41 zgedDon0QjC(R%t9Mk}Pv@_2c@y!MrX3*WN_M<%$vZX;8RGb5K_2EeQmK*@Gw{|rH@ zF1TPU`A(vfXJF8REn)%f|Bx!|1A)CuK1d61zJ$m#d_Hx;7z*}b_u=|-Tnvh@4i3@R zWu+A_PzMprQb0(B<(b+g9)Vc)wRx zR!1c`&hnVdc?uSAC(v9uHU4!K!ksQ=I>@nS#ScA9v5# zzCozs+-eO5S0JLZoJ??3`*vA>Jn{1>C?cn%ra|L_0~gfGv8;oH1Km8m#AjdGbW=|+ z0phnLN^2?d2DWnIbdET_xDhF|FiolMC3o{$mJk{YhBI8`t3+GLwd_s;QH)!sUH`>ohzDB4&H8KHDWq;m^(rN~R>&Ug`G$1--Gfm08G3k3^9$~I zp#L&~bFJvmef}HBh9;h3*;}qDSNI1**^IsCxeCb_(qjqPs2<~egPCk?o8q}3pIS%v zS55v(-DVo3O?|CzHRS+@(u!EswOotpEwqk^R?9Kq=DKT|a+t>87Z<4f$}#>jSDr#i zbHsx_5N6g@3>@(XJM0Rb77^H}t##vbn3+#IU<_Y+a7+sewXt;r=mtj$`R zgIa7j69hQGCZDg$E^w(UQ)(4_`g&_`) z1C*=Q+qM_K|EpxV>~#`~Ecx;luQ_Ll6s}JK%p4!e=HQVs)mVU*1Zy1zeadt?YBZ~J zUTM!lYf^<)&ih$z+;zWE6&pGIw6wG)b}Z5;l!`PYO!T*lO>K#~2l7OaCBAP?{ZKSy z%vjLyc2FnnIsMbA*8{`jG67R>0M|-C0=sTotW_G{ICxqsM~A(B7C@ zf>QJ4K;Z(J$&c`X#T}=?OWOUKe8_veBR47(&^+vL{Z68$LD1b6bN^owX7hv|qn22m zZRejHvTbbVv+v34X5$r&{L(#K>>X88xNxLv1S`VvMEg0}N$g$rAZsmgX5`Rxu?1-smZFIPi?MYHIt7 z4p9vaMyQZ>UI9Mlw$p;zJ$x^Lk9({mx0=HNw}ury_`NK&Hd@4-;(a;^`t>HO1O^hd z4Iw4AF$Yb6#tLV3RWXjjqt=6e!BEP_pCq#RDc^wDD15Z0Zh0BD`rt+gYPr~&)#&&i z*?ySJRVR=a6Py5%>e=(YD>PsGYkq45z3Qp*Olwy~_i3#%_FDIm#`iL4J$-SDm)e{( zWBb?dO|MUS%s|ToS3-|8VMg1gEi(>Kz6Oi8YNCRy9WDD&?XPw9(+oaGw^WxxlZc79 zHEXNJaNNsc(E1bWmzXMx(lgq5LQ=7 zIfDoCw=Lo|CHZkgXwpS|3V%C7q6ud8fSj)lwzFx%4SOathJ zrQWw&02D?9iy$754HCyY4N;1xFNB@&rH}~AEunpA3lQZ>?JZ4E4-xsS-G<0Smz!zf zF`CIJe6*?4d!8d#K5%V6c0HaxKNKScS?8d*ObH5l#MpxNFc%V{Ip#&SUg#lRCsokP zl&TpQkS|uZ>S+8U7xJFW5{1Ye|G_mN8z5O)GuK+LXzW$>Sd}U|xy~H(myF2YN);QBZ*N)ww`KDm zzucBuYrzkN3FS)}dxBBrKf}RD*0WBErYnY?Q0RgHtmRFumu3QiX=_} zc16_<58p+N0Z0x@W5M>RQt!o!7ZOM!EAZ8b0-_bEpb}XhZ%(@H!g(LJ zyd^x2!$!^I`idfCa>{2~hlkQtkoM-+m%=pB2dz zfy2M=8i?@TGLW&iE`9lQ)Mu%HFjXaf1g2ggSt3x>pP+5fKt=1h+U2%2KNsllf60Gl z9~82L?gO>FfBufYvykIh+W|xt3#X)LMZ-zlyZc!uc9}&gdUqha8zPV4;FoKLhBvkd z76F}8T9MQVHm%y1XakP_@|VQnFVRWIYj=G6ONV*t4MM@@e}DQJjFHM=W#96w;!W{j zxDBF>vhN1)x)bCO>Y#9ot^wH)w1~GsnY!xTr+VZPxD)hR}RF``FPO@kuAz};! zUqFWkw)-(McNGs0UyA^F4nP96fOl8`%93+`+luV2dPMyM3PAl#a~0w}CFnVTpd{50 zQ#-E$^de=foUDzzv;*moBg0<`GTGKw7V6MzDZ)5|&M)s#Z&wO@LJ{CwlHixhyYg`p zt=@<4i0$yx%C?<9uz)j)O5+Vfxb{w{lkAg5Cwm{I03GK+6Q=*m=rI%kd>ACz{B4rzZq5C}3tXk@{r~ z187W~RcHvjK|q>Yl`JpVh@*=OLg92^{aP8c-SU|8po_{ZG$DJYy!6}iB4NC-*QTkGKdyD5-)u5e0_dGNQYfE7rGr(TKyk6s4wKzRwc=XuW0FK9mqC);m9wm6 zZdQ)v!PWUvTTpfgiqc*BAa%`JwIPkaQ?I`^r_f#ilN0~gwfH@~_*m#N&6oGZCNcOFEi z_aE^HIWG2+mW;L>b$~Kc%D4<-@lr%6=+9=E5kgC1bTf-@^W48#!F6@~lHII0#bhg808NK+`E-`u*akRjQ z%V(IW)M2?F)WhGTpvaf;A<7jY9UB+FFRT9t?rTj6K}C}YkxG3WqvTtnuH)MuB)gCA z6k!p`f?;^ttL>d=1sdFQvH-2iIk+&?O! zp7E^}kt~^Q$D1iNJ!FVed$dbc0-#VaM~n_HB3HZMQ>SE$ZUITHeo`9}12 z>H~-aBwm9EHo7MASQDZn1|l>If@lY5^<#$VB0MFS-qf|Fd3tx3kcb}g3hnP53W%c- zG!sjM6389{QBbOzfEgD~6tP=@LdP_C85GWjP!*W&N4GPa;IY{3F_u*c(*rN+r|L_( zm&hejM~SzLqCEfQtiV~FsO>;BF|w)p*5m+YTB*)igUcFELE&=!lT1Pnkr@&xqDosId!tQAN124MVliITHHOJi1d&6 z@ETf`RC#aEUz2iXSt5MbvsFIXGWwd-9s>Y7UGz(b_Jv*l*2iJE$FILL(dW1nFc7F7 zx&PxdY7=EK? z{^48}dc^dRA`te0Ig{@n)78J=VYfM49*`u8N|S4{c!N~i^~$;cg8`#=5iMR?NJ zZ_iruzg$ML6kJ8ionwCmr~lzuMY6Q@h%UeFw#2{)Wm^ z2>VwTl>Y7dZi_Ioetik(oC)GcIXA5lqsV_*@xLS?%0iw@&!6OPGybV@&tgRyXCjC$ za6fgB$6Nyg&=fw$p+_+S+ApfAsv1J`J47A6Y!Pk%g(Cng)j)M!Mpy%IDAXtn!Ks_> z-dn~Pamez)c-QMD(1ln6jPf9h4wxI19-jKi+Iv$?i}EaLKUGF#t zCHq*uGi!oOY|;6)?TtV!AgLZibcEq~(o^h-_?2pr13bJ05(PV`o|f5-A)i1h(~`M9 z_OO&vD062&9ja@CN~l}TcX>WB*RHb_2LITBfiE9yY@OiDFk6|07NQB=phmIp`KA;; z$fEi0cmIqAlgoK^4flJ_-*9b6#(}Z4N9Y)YX_=6S!A=~D0Kn1}Uj3~w z$^#!%6(&vTL5BGJsfg#0?J|eHk+=xosV`^2V{>b~J-d=^i^Oo_ASX~+<2sew4qW=f z7rXDjtg19qe7%OW``zhNe}<3V9qcTL@hEeJO!=kBw^E>8?Gy(tg~ryLnj~9Xk?spw zvni*ig9%phxYt}J;*fxX@?}_-8e}E>axNc$YaC*t1OA)^U~AFuOk{8TLEEfqHm(X)W_r2N#ukIiTLBAYIvfOJ^C7BRWJ2WS6F?x}!GN>}KXtmXMu3p($a9DW&GXzmF>jj6*TkkW<2IR{{P~oP7-Nt?%ilR%vD5bK`K|{U<`=aq9NW@Bq>>2UTsFmUwN(WO9 zD8qT!?Z!q*h5cHIdk0)=(fLlWA2vt(E_;SC_JXL`QGsse^;NZLH&P3Nug%>n|G>)X zC03STlzE`nZxjkSBoIF>Y0&a5t5tpCK8$RBU6BV&y3-b+43#lfLSc;=f-Lv^Nt`Jpz~%Qmejo_zBE#U(uB+~>QvDXwAHHH@`=A7+ z<3uGMc8?)6v+4@I;D0(9kgD^b@dFY6u+I+mrJX6D{ho!2tH?s_BVLFQFoo8V_MsLk zIrjQ3I#B>A%tweXWkPGi5hQFuSJ~GB%isW}9dWILhL(=Wi%2i5MtY^ehrcK#ZtvZ1 z-7JEX-k~B|Z(v-O)p55m$G4Z0wI(1`aM{q~Ydyeu3JLf;@*m?$b{kc@7vAGjAhf2o{$rPTamLS`9Kbh{`=ee-k>qu zIL|+bRR2TK*jkxkeFihCM$hqZE^T%%uN1&ae0gZS%%gMd5+tYzlsvvS zK|g`^NO4B(;TUnx2j7Gx%5vQGoZ@`bq|t4HwV!`YqDSoomFIlAyv+=kL5O(d;u{v;OxlGrJv+hQ5WcS*%dbN_vm*FY z*HreJ`!=0@;kEqs2S0YwM$uT^MYay4?o1$wA`KY(HrdV+VVc}CV z3adi&6$@Zc&AX7k6?i7?w`KtHU8vVQx(p4y9Tz)c{CIUAF1isRrzns~&i3uIWUUzh;cWosnz~S@APDD-jFe`k$&eeI)#2oKkb>C)0c!8< ztucLf;*kK~8p-{O;ra5(b=Je(05Q3n9d-$SmDZAB+6mS<(V2l1?!_uH7s|Vt@Z{yh zb3S(%LSNPWq|6!V?QWbAw;jA2m-zZrXxb-Bk~69KG_Q07m)shW z4}FDZ^kPlr>C)%)tYMdsODHMAotjj1EUkL?C&0F5Z8$!*m>k2$p7c&nu%+$f$%Bv{ zyp_2+2PcvVgISPp@eA9{)_eBDFuE}Md8>In+2%972v|cs`}V9yll5HOi<||%H7A0Y zLu5XeEKX!2)>E1NUuPvbyESA28YUUk=)Z87#|R4g`ub{P`>#X1%yVDtfsU5#M&%P_ zFPzF{C`}ql9FhE#oB%wW$Zl2*p;p!6nYAJ^% z=%}4~tB485rVWpO$NAK-6-4O7G~IElF|!9VnjSvG%bHlaKo$>kGxH}x-dP)CZRUT` zf~iT-B@*eWPZcBjxSXSgqclLaRt4cWU_AINs4NOyU8NEGBBlOM zAE0tECRV(A1uzXe$V;T6iuJYkn-L2^`J5jV&_uS7A~uWgnz}qvG8ZH+-x%$Ou+*EO z6~v>s1oLQ>Ri3kOFQK%q-tnc6nq??jw;gGbl#ytVfu5f2^Qrd9LnW^?t{Eu|yY^V% zZt<~x(5$P9jIH4ESLI;LQEJ)AAMx`D*n@(4?)pI6hF?#^uUG!l=akDA;TntlEPHXH z-9=CL;zX|D(X-^ZjM#*`0g-C{8R!YJ48OtDK=lwNUYr5XkdMLrXtjaZQF~L)hL?bU zb7@q(7tfHRoscSGV49@4lQ(`=Uz-n`{*tr=NU*EuJkK*dEg=(s49*>Ok|7kho{uo2 zl+Uut1$PmZmxXvpnmbJyy>WjC9=vk9N9b6kR({5VlTJH&>ryaO5{+r7>bF?*w6#gxnyo2HRWD-4m=9_u8)hf4e-c+eWujW{ z)3OLrbph2t(0R(h`jz>f_Uw}*N}7NC6h~z!H!8Xc(?tGx+cPj-l#VUSWtsrz*hj;d z)PPC0bFy|F%~Up&hCQnh&r$ulrC#)~Tx>vv8Y{ln6KNV!-r8&KdtIZJog|i&`a*!J z_8bk_jzN(wGZPQ>0nsy6#1D_2AxGhD8QCht&+yCdD>OdVE6D0ElTaw2rh`XMkq6TK zXdu|6w4Nh7H7lQZ&fI)dIcP^Sm&y<>tF2$$+AH?OC{oj~J1T+4I^ndrRs}Op_bu@4 zw6acy-ZfiO6`+}BkX6>wo%2e>!{4W-{+PAM&3JB^Qw2crZ6e$u2a@jv8o>E)n>Kzp z-mfAPmB%ELvrZ!A)>odEU?3)r-6*4SztgC4+~nVR@W)vUGHVDCJ9qwSNVq!X=i13c zdiEJA8>Lb4*?A_jr>sU0=95=K-_h7=3MLwiqAfxD z;@H9+p>Iw&_x#{2xOv`nSc0LvTb{L5#=a2aWb>N~>nM)|VA4q4L|Q^~DS8N7$HxkM z1$4lj_;R3d7JS)VtaUtI6qrO|lk~8;Uqqoe@UW&D4Q9kbg~6#f7t8)>ZOrLj8w(Xp ztzayE=UW{O1q;Y0*iC9eFg@br8Xxd=6^uqfhKN+gq!(N3s-Eq)?<&|j{dnpG2NxKA z;ZSf@pShZ{y)am9#21MCcO4hDu{Nig1+8yZ-U}sbR_h&`z&xGZw|ZafTr+GZnD*vJ zv!OGh0O5%4{pjr}6CN?#jF&Zq=>sU86)4LdP83cRllNgc>wHPJlg}Y5_#M?X%AV3ot=hWl_Hv&r7+ERyJCr~vD zF&6Cg1tZ}b^qTt-fnow_tlZy@^=UBw@j(G2>Euc+G8XqX439eDiMW7_$Djn6w2z(() zB0Qz!lt4`E&mt#z=VV>t^X9hWi{C2nRT;sz>MWC6vkYBs5=2>!Sy`%tI;S5a0v#6) zlBP{dyk2wcI9ktos^9eMrxVnNtfCY(}dx`rzb=a}#_+rmB~Vv8p3< zc(A`zIH7{=c%%nPwYx!w?U}l7&I{yLhR|*>4Rlo#OU<1aNTw1B&fTpP(ji~ z;^1`zHbpp@x5!s`=f04yD*iOc(Yp{^yzCCYgKQxZh6mquIMqRuisb=JRcgt#n5wSW zPixRGSuA)p7rbP+kO3Fj9?;LJ`{=AchpcXJ4uKpNup*ZT>LR&L=<)FE)u|81;H)}Z zwTX-NJo{&x#oLk(56nvZ@F@IB5B_{rHZK(`gkyTGW{hXZV4CBLFjaWlFV40}{6o6S zmphVxfH*1;;20m=n%vHukJrZCrBZr&SO?+BX2=7~DC2Z4(<`(VCwbFeH3I}6*snh= zbK!NsXM_g9j9@)yHm)*f(&LZO>>MqOwAiqj|2Q`XJGWvTJ|!o;8NRpPE>}ck)^f zn~OMu;4>yO6$cB2dRH4?>*iR71?XNhKK@2wbgP(}UW~RX<8_${&6gW-JxF5$$eWLU zEF#KSZDrY39ShP3V7LzMNlNm656RZ>L3M;!s=Wl~!bAaBC?^Fq-YN{Q+)RT32g7`* zq_~@W&ch@d5JErlC-%N8J@6AmQD$4e=jvqAD$QHHDD)I^uJH3Dx%6fy+%U70``)_p zSC`HZF?y+sW(kp-Mf;R_^`PYM1htK7ZkvRZ32bHN2j7DdLiG2K518Qpj9bqoJcDLJ z??u|dkxdn2xbcx2hzi_Ri@OtNM9bc$CnaXz4frIg6|!u6IZWI;A9Fuu^hH(^vrby# z%sfn`?!?&!<1H5vQGCTt&K;?y1PYki#x;CnLZ+cv%|p?2jCrr3Xs7U1Q!1GRRde+z zu4iP01DzGQ4-SeZ*$)@?i&yE#UarWE)~>9Emi;ddG}dDmBa!esS;j0C;a3sJ30C@- z0#hWeb>&0J*jQ}(PR0{FEp{BLT=Er!Jgqy`(#<8`sV3#4?86jOC<0CUt3nn`9*2x} zm)I5YNNFDxjVN$+C6&~Pn|e#TEeKS41rHwz*4Y^?Bkfp{pb_(YNOBszR&lMyXs&=5 ztgMYgiSg%8a&Za$5kr#MpO!`c4IuPCwJ!eZB>EQThUh>!91x%H!}(E~M_TXhyc(}+ zuCFq{E>$4(uHlK2y4B=nonl?OQ+jH}CeXTYzBVYgvDka9r-X3Rc@ixgquJe{a9g|p zKdzU5a(uTW`PPG9NqO_V|I#>AS;8N3StF?RyC1GsQ~LF*E6MK?SL*0@b_t;#yaxQ#02MbW@093tys2+p6qNkI0MD2-6Zl29Ym+M6^_9sHZc z<#=NDOEivnoR>6op1?*~eB1t$MfvlljhG7Uf_{+neNM}NyNTbvjE^q^kHR&mo2MxU zLD8h2aBdsY70DN^c3ys_{$!r#^wo&{7f+~-HIP(I4{aV&v&!rRn?yd~n?}&Mu&MXj zjz5V?p-7}@TvKGtBnv{)CA9jQGznpG)~4I>`nI~htQP6Ldd1_~gbAa{~yCGg#mWX2`HGLDua zesH;s(9{SafuUSAn2MRHrFA3b9`H1gA2NEG zy2I_>{QvOw7En>Hd*3i14blQi_aG_*DAHZhrGSzG0t$%q&?zaMDnpk6h)53IAtM+x zg0u(>IW+He@4e4+_Bng+?|Yy1t@W)n%f%XD=8o&W{`Cu%7KnTX#o(_;AZB(++_^ib zI~NKjIClX(#EdKEi%+&@|Dzwqzb%v~TD7bqk0?peNB_CL{##$evX z?_Ce2Kwzry`8bwN(~#;3m>@U={Bn_<0qG7z3lh>cke8k+ueuCUm*cbdUc4?wnrCdX zm&ZPgCMl?=>C!}TR>s(9jp;8(DDC~yh^E)zR_{&vmHIZ1n`5lf&_10;Pc3Eb0Dbh@ z?aZyXK^j|!K0RnM#|}<{Ir<<1ohjmm_7eZ5Ed%gFF$EaVBWM7_wFZE_;VM>!z4C!p z9@Mq6%77!bY+`=MO*8{A%s|3Cz*nLj8hfq`c?=xf8n%gKKs7Iw3ObUln#y8^Q|dmZ%TT_Eji&~bG4{q-&aF|69|DtNDY zpmAqdV{sw2*dLT5S7V?m0m5fh%Q#PpZO4N1{cJr3tOxs3;=n+v29ZmfBzdnjG&SJ} z8VEp;lTSxsRD2z$giMZ>V-J$LvI9Z4zsNKjj0YzG*U%Io?5q!RV9K-KfQL!;WFE5= za3EQq38nM|ZOWRpFIn(2m@Yrj0ecGN0?YAl)Fhx3=QZw7oH=p?rK}lyIRL+&mL{kW znT$Lp_CW7Wg659(5kDoz7ZTd+Wr+@&A`^~|V*rXXg~lMjtjH7;g4U`w!*?t@Jyi76 z{Xx@|T2e-@5n!s8MzzC;^Qhn+IFRDP<8E7na*#FOTlVYIYxMExkMPCW@ReG~T<2ik zlD^$&pKaPKGAP#m4AAuS%txs{-f!Ifrh#A)7t*6BX$LA}0~*IA`Eiw780G0nqe-`_ zd*l?_;tMIGry*|)0VWtY08K(OTxj$v`jLQRSMTRss*dC)Uf|Ck{VI`&aa=5^#|CK5 zDu?ZZP35iA6Ms-GFHlJSf@gD}JKb{De&;iPV?7l&AUWri~9Zwww5IzwdPs%D2g~Th&WPig^Qi? zc-ZTs;eBc<+`oVIh~qAnV%3$h#W||=oOeNAagX}$C0owE`+~4yT`8z^N=f&AmPf2i zy=V(OK8vV$9A#&J-8zG2*Ul+t)Am6gi`-ZRWB(L?NRAX5y73F@mDvhFLbSj+&J`Nk zh2K&YS3&57`BKhn4!fK}gX1^|FU-(LVA+?M`O`Q^HG49;&7V7+Y*-mfpgReL4CFem#h{~27J{c%b`7@h25hV`3R z8R|aUpM!qmQDvbz>Af_{Thyw|)aik|PQNJ>OK4}yO!dX%)dilNzB5o+4Nn)_RX{wu z{}RakfJfz>b!907=>u{#fD~Zpk4Oc@cqU%<-YkzsE||MGH#k6{tsBwD|7YzfM$UxZ-@!B{ZM%`Jc&{8F`Yg!vL5ytg_Tmj zOlLA6uMP90JA8QtMw*d`)MQF^LAtr=)r{{c7nQx_7cIIc=)<|qJ7H+OH@WPTzBt9| zp}6f}6Mn3|1%`VjELNcr!VCEWuuqwROdEFrO*z(1ly%E{Y3`Zk=pK+`{JhojBJCIe z!XB7Udb`e%#CBg>Ng^4+TM&s>D5E8nE8`->_tx=MX6@^-8R0OQ?ycUaor_z{iXFKT z-Qn&;Fh{kxqcXO3p#i2(1bBr|s!}uil&Q?^GF@^-8&^R7Gf`n>A*U{Z7bmy}Z%4qY zo~@qpycg&_Df|ofW1Rag=lL!+Q(rbumUHJgd0kj)pZevEB*IUZvb>PWPAwR`r%Hq^ zFS7O^9jHptUKw~$WHm~MK4 zF}td1q+?2+IYQ?WO530HSex7Xb-of-1*f1Djze&PbTovRR6hkvoZCQB%yL!d)%7n- z3w%%U%`Fw}{m2<~jqh6q{a`6%#?wLB`ujtpCgdP&qmDjoPBl1EA>ml$!hSxcow&_{ zk8bZ}#3Kz@fZ&)ZQJ|yyE#km30$X&!+Z^s9Q<#5LPf$)vH`%z31(ggDA+_m}B87NI z3icP*q_|VJg=Dr&^DZZM0B0y}cDBU>eZlN+5j#sa`@BZO#*W+rqPlMo!eJ*T?zB}5 z3WquXwaoXv@Fpg5qIQpHiQP5$ET>0{w@MbZcwk8!EPN5|EHzU{w8aHOHf|y3B0E}l zd4xk5*c4=a8jnwv`rA+&CkOCqIYj)Yz2z5q1ODT`-#dPywm#pjVzlKe92w%z<`t}> z(-kcIO>t6NYLEJrMCEyPkdAuzk*1u~zir{LM*R6;3!m~V^=tp|;IiYH(6+ok0Nm?X zmUts^b#bYc&1l{?(ySfciQ6P(-JD@3T_Qf^jeDdUqVdPI=M&jrWd0e;J!PXhbPcd4 zCoeJYSXxQ@)=f$J4CvxZ`)IWk$HWL9A6CrRYKb}0eew3L0Z^s3-S)JEBUpppFrw8S zXX6pwS6D|Q%?(-Be$#WPTyZbsPj6YtdNKpHwY#BvJY*ZN)$absN%pU z)Z6rkch=c?0i@=y9tq*K(n=Z<-8;5%`4tkZ45SRQeSY$9&v0`~DlB`V zknQ?Fiu|aqm-j^m_QrIVxABs`n5@+}oA*qxN99|+{4R-!XxDSd^?_8aMj=a#LWXzW zTBC2&ouH8Og_q2?ypxYUoehL)89Syt9x!=!-vhKZ_9PP(CbGHe=P$8?7#lya3o3)r zjf!-4(-6E$(lH(+}HbFrAMAz7?(V^Mz?1yM_J?ExZ$nJ>4;#$ zwdS0pkN)utCtxmqWlMQ~TAp7gELt<~YQbf%S4Xw%BZ;SLV4nS9Zx1ktM*UkFgQ#_@ z%!)3v8PL0fJlh|%is=_ZOGUVUk2-}ff)tk1*H?>&WB#)7{IM0u4HD-VD|0-fIUlbp zWv~h7IevdOGuyB|C^;d%8D~eaeawErv#>?Fb-bAU zddK^c!JRh$h;V))Sd9^5-ei0G^NPcPcWdoSZUcPTe)rw#Xa^^Kl|^(sIZ522*1IPz zg@yp|Oy^qO6_`l=5cLll+ke2Osxgj5UVE?+;PM0*M<%o!@51&HHGf`^k(u(@mpJr|5M_1xF4Lx5 ze@tpE+jV|uHIc;a5dUY$W++3-l2xwx&eiGKFn>)0Ikq1>FOHD*c$(+7z*D{N=-4aW zeZw|Tp8Ko+%QcSz)a1Er|Gmu6eh@Avo)FNmkOC| zu_4&2ZPy9IS_1(H&=g29J2FjonCr^?SfjX?lBL&boCD}@o>>rl61hL%0jXDc4T>*y zNS)?)FDzk!%-fqRU6mr^+W906%>%U#Lhj`1Hox!Q4Br8Zn!X8Xe~uABC2t92y3C8k zyl>N*XYZ*t+6Q{So_oi9+p^5f<@tG2Nlvy&faq9X-W~Ll5XFa3 zKGwsh+-MCYl2i~CNf&W@H}@e{Vc2)2TUg^=NW>~I!dqqaS>`Y}wKkMn_5wHbxCx+l zv|1zXuY$?OWopt_plf+ako*#6tFQ?c)~G*WR0B{&qDFoI<;kq>An2W&dS{6_Ag|7Pg9o$dwArj{~Lr+&ExQ5&`?H0TOAzRjop< zjFYb6aYZmaMh!^=W<$}haFR75WdvugmKC$SnD6*Es1Bo$SZ42@+#$HohBXi*C)FMQ zoR&!w1Q3VjjmCQ`KQCxxJm4AfV7_jj!0!T5MhdU~t2G%k_22>M64UYwuRa2@I-&&o zKxcR&f>q;87AO>pNE`WoP-%Rn~0)-jMUi z`8iy=A5|BCo9~0#>^7{Ksnymd*Os?CjLTK1Q} z-)U~w_;!JamM(A6~cRypsA_ z_Jxo%G-&*`mF{iiL!*c1!sX@GUcpP!K1z`Y#Zk#fGlaMj71D8(=5O0Bah|y&W>{h( z;K<>Di7Yh?g(?EoNq>)fJZng_?X_E3g+lzfUIxJ_ki2Cmf)KHvi zX}TH&^)?VLet~B71nmHgpzQ`Q)9=hYz} z3#Wb^{{+}~&7Y~uwU}y~kwj4?!ziUh;MYOd z(09b6ngjn+FYk+HOE=j%$|Jz=F3r;ExzcKB^?|=O>%I`(-QQEXzpc&HlyEv-LHJg!4f4iM=%Vjwmn!HPD2n%K-^Cf7Z1y9ndIbM5lv<*}J`)Xkkw7ODfC>PKjCh0lX zTwuYGs`C&1vfr9$eH_7{LD~SgP_=-NSqq|DU6$u~?^m#@n3HrDJ5{TShh$6h) z^!xtFiAS279T{EykK5;8w^cc6+627j$lz7?zpu6bwgyj#1jidyqEro1CLoCEyWs%} zJTn{g*%`Oi<%_`b=Lk?9^?8P5pnCyJ#D^?E00jRwXMd4Gsz2TevfMUX?x1uQzy zK+p!dWx(drg1cUrZmwR>MsNzS+R5u9aa$TexJ?igHn5}+qg6a{8jwr_}=oQCg+or384 z?2+obFy&hP3?~MHQ$Q$)sSuS&C62_w-xu^+NHwa56fyt;zV7tor~$MvML1r9MWq&; zoe(Sf`=a@;a@a;ej`Ua)W}EN;XlCiRJZQOf>&I`bzcLVQDF_^15mRoeuKX5g>7;`} z2H2kE@y(>j)E^?pI}~Rv`t1E$F$c`VmlqxY+-@02ncf`(5vWxtZ8HK~meFd{GT;|3 zQM$#GzNBZ~OJeHMO5hBjX%Aor;KJ2`_*V-cQ}rO(7?X#R3P{UZ@>fOsB!K(QLGc#b zPAOaKHYm=QR{Hn_sPdkF=!Lq>Sx>qyIs;$$ch{90^+%m*N>=l?qvQ~LaF zOwPi*q=%xG^Z!W9|9c@MJi<$L&9X8XjCYA5|B_=5y2z!EKqB|19yEc33EF|Kuk!@N z05%8rvfGj}bWqRg2yo{Cwsd=7^$oC>8R9-Pqac3iK74EOJ;v?J!^r08|s{!usx$0%o3Kq}NR$$H1cDu}UEIM>6_R|-zX=nO^o|GAw zJr2ZpeAWU=3fHD>z_7?2^lUu=NzonF%e@eTgRTWWO(umv-)#dEdkR|DreNM-%`O9E zw0xUx1L`U=u&TJi4}27bvb1>&5sQ1m1h`3#H=k;PZ!i1M3DBW;nWk)#wV2UH!_F10 zghk8XOH+aH|5{RYCm3;!%8ZLlkHS1m4wu|&uMF)1$V~STo5;e)U?SFK&nb_QT5b@_ z+`MItO7%O}ar+`5fOeeg6AKOm0ztt=gzBrA_IWhX)!6Hnjq1fFC{nyzJ6#3nj_RYw zHB+8$;Lx(c6z*4Z9`zGkR@lNOQdM^bA|DsA=V#|?{Q~*s19;mhXjL`SKMuQ)CeweWo zOG)4np_9fvj0gM2ckmQ^oKE(x-YmNTMsKygl6QsIosf!B40&iyq?42)z^RGU%*9FG z4QSfX!J5uaJyYXmq(cEfP#MVJzgY~Ge~LH-Vt{Gi!ElB4s{Svp%78&WHLMh*8#GYy z5R_PZ%^7FiG=CR=f+wj!GfPIy9LU9qQpFZ`@)y6ne@^ri1Mb&V(QfH;ynHWRLc*2# z=-|_~;MvUAd8mE@0IXAHZXa(fvU~#&j_%E*EmfQaZNpo4Phllpb=)nMETVKJ#UFO;Y=#q*11_3ZYG9|Uj zfQ}X>;(&&AQ;%P6PX3@w#|n^bC^Cqb4BA2BQh$izSa4@4j^VI3RS>FbFFFf zmXLERJ7pn>iZD!HuY{9PSPJBxGNt?v#ROG+h}FMCqc4zr57O05J_Z9L>nqZqOQ5Pe z7oX!5ZlXyW*5ZoQ#e1zKc;RTEU-*dB(V`K;3Lo+Zsw3@16)gKnjX4O#l-JXq6{}u?)(P=H9gxvraOQr@Sk)u(1 zJ=T$-Kcq7;Qj&l^@|Fz&i41^3;r{2qPmkfx$eyYI+{uTt@ErlAr}D$nM&7LEKrSWD z-dt)!jKQCLsikBF0LtIl-KpfC*57q|DLb`IckXg*60jjzeK3$=rKhtKNbmZ0>#FB` zuzFo@k>7k9JK1b#BE*m*#7tBGEK5 zQNc?cckVfT&<+^?ExsS{1clHla^fprOq=Bym?vD({|KbB zZPg!NH{!a)++?8 zq4H9n+2cWDr|^XCTHJ;6eF0L!ncIzT$hu--ITT_uI0nzHUBa;S3{vJg(z}MfXKfnU zpZ0fT!3ue&ljIT=A*H7VZcuZ!!f!-vJaU{HFLysNtzTM!C>4Z$Qr!sEc@~^GuAlUA`V2C~-=G!> zdpbUxrmNx`*_k!is_z}0U5cZN2tEQi_pio!zzIrw*+kuL6*jkzj>)}qxz(OFR6jO$ zR$){A;j!T?xo|n9t9bxZj)ysX}ws1f%mwC2CYv`mjz<`(B9MIYyo}CyJUVVGy zQuYH8@#Nm+R;oDcwv9rSIMTz4V|)Z8T~`kos43bNIz;onC=n=PL0k~57oUAhz8jg* zbCyx@i9S*n5+5>Y%%h%bb1+$IzM9y=$h4&wkmqpxcwCIS6(;Ev6ZxdK@7|}wrI19y znzTQ{zHS-`$b#ZuueLY15)0~)SHM3tfoVwBLI_@vy!nR7v$oja3uiyt$>^*+5AuWH zpW1Sq>syy=lb0i)B)Nc{3Yiv)OOlcxgMU4gc1H)6upCH5DCw8oArY-enA(V!4Ic^! z%8-rPv11k_XqpwcX#wNZgXbu5??@wCyl1GlUIbINWrCH=$lfA$zT9nCq@`7^T~C$e z!d$q1E}#-GKFM~l#~3;#;u59s2L#!IIZIrYz!WK#z=`=BJvl97O1t$i85XaPO12X} z5hi?Lv?a#D8%4Fp$Rmioe2!a5uw`Z=k}J+dM`|-n=gwlfi>+lcmVF;y+cCr2=Xe$n zJ|g~<5%TkNf&^PX&fqHM+u&Io@|Q0UqIVlWCu8k|f`Ek($NM=A2j>;oWPXzU3!U~B zHmfSV8QO2zSS5vf1~Mq`vG`!}HaU@{ju&ZO>gxisVyY8G-@9I0aDs|w2OqwiCwm5R zp#e9f8k^=sqMA3wq1}A|-^g(WEE}dPWesR1_Unp&mkz<&EC#!jP72MKr<)BlVd<(iC zJIag-o9jvzO4s?$*28jnHn2M;=D|8&xX8H?-JG1HpKSoEsGa;-zP1F)ZPu|p(E9KR z-9F6sU?W5*ZKFGXcit=xb|v6B^{M1%+3mrN;@f@P=MP++PYn*dtOKw0rM|`czNGgp z%~YrCDh0VzKYU%gxTU-2xsG9EQh0E$Gbqp9~n-C(7%Q1xC(p zo;jnjwLPoMHKScYSiaKkSJ6N60$2?G<&;kK3(8r#E}NX)WL}09cgO|Mc}ED6*ru6H zzIJpWlUDh6XtnE7;Z1wPUaICf&7K@{?94W|PqeR^3(-#(?N(|91;bO;$?wB0gSJ|I z4`+dF1SQG7`m*bguR*wu!Lg$14b+u6!j(le=vC#ksJzoKw%Pc~^6~YR z(=P8wPi1^A!Z*5(LIjG&j4rmA)Ycm)sf!i!&-rKx-`M+_Bhs>0BX9|xriJAeIWij4 zS2bHdBx>6f$%w%FPKiH!jgh!3W}xOgp|^u|itLo6ZRO#k1^@_{rJA|eJ|q5g6888I zyOCW^d(aeSmuJL%K)x?)oUp{9PFj>8kC4B((%tqset)|{^D7!CTn@)WIUq^)0R-~c zzyA9KS%I(RNHSWBoOAQ8ib<3!Jj>hKrpTntGMU&!$&xd^g32SN$6bln>MqUnNQMdt zSHGb_L`A#|i{iP%2h-;Oa2H$aP$hgz(S%X4BPjWdW0un3da5eNC2iqQyOh;*GtbOt z-q<+S*#}9YQ+>J1G-I7r%Ez-_%!m8ZuRc+- zEsY2%<$hFVLD_477RU#fbCtF?J*)qjpFEJ*H`TcG4% zuG>mX0fH`GV_5b?z`aTyLILtFcaS#Iy-^}u2BvS}%pKcLgK1Dy8N5NbVkrJiO*t{I z%eKPg7>qnW%c&(!tN85GC4fHXay<1&8MS(RVq<%4ZDNzREdiI%+*?(Fq_c(DRh#P7 zDd=u)HawHG+H<%WKyffS_=)t2Lo(xof`)+HcE<~pcL+Ney{!)mKn>iH2UGt1;P3^m z63U&VQENV&D_&}t!dAv+^qi~CEuJuH@q(;GcEh4wAK`3-Dj-FYqDQ7{9rIVswd z@sJv)pu+mPeI*iSv<7#yzVP{+sAc!wP|5uGK4~>3@!tN)bT;iAX;FBd6za7#`C|B) zladPiq_0G)*j1D3*Qck12#elYT|o{$;TWqEBU+0*<23h-GcTbs$+A;@= z2ZWTkFut(1`Nae6dt4T*SO376QnKzmo z@#Be+r7&g2NX!tfa4#A95}~{<^ERqWF+`q>?v1w@m1lDBt@0APX6)XQc`GAsxbP9e zLhjg&ZNn$!EBQm=o)A@;&@ghx&7(K(2P=bh$_vgfW!)Oncyy`lidz;&=Eqd@DN#8k zA+^8S!^PMKEknMBLpOy~rBpaHi)X^CZ#7uWP<2X%hLE#!u9Rh?+Xd^&$gj*@LD_G?nD==!dzmI5j`Z*{yhT_U|&p)ABr@2P1@FTI^w4BlZusZd- zFsue1wd}$bq(IbQugF1O%r)VB zmqVIEnX{MCMLHlh`y%t^+w$oYai@Vg@=E&VVLHf?Qm)~lYJLO{H1Kb*qt4isRPuBb zF829Kax?;E&*54xD!MSua%HxzvvVo&sH2EyINn%Q{=tUxq>M$ZP4 z50%v-XHg<`T~!=gVgPD-^)Bv41Eb7mXA}lG_@2Nyg~*z^ul?w%!i!)A^mqvIPz_v3 zpag@Gh59;-Q%jvk5@!quqMVOg+S(*c*zK$)1(hBBz76zaAV|gt*-ur9$q>Sx_~lLpwHH{Wj$q?eF9G;7YX|eUmqa zR$oaTnG>2_e90FJKgS&v)_RA~kEA)gnD88YHsRoxMTKQB*GqxWUE^?JvDhRzkc6@0 zb;{!iJU(^LSDK@g3>9-sj+D#5A=Q%!YgBcR_g071-#4V2#ze~*pXV#wp_*!Kz&U4f%VvL9Vw*H9>1 z$UJf&w z>KEGIc73iOnoEib(@WGTd#D)9X?PNge4S1Q>`-ueQx64^&%QAnmKee=BfhuhFxWOR z9BN99Z89&4P46PSd_nW+zT4OBfUvD^0{sZPAI(p(qI(GC^y6mC!F~MbAJ;RzJac4HX1~q*~aQxCH$;QymFp(KRM*niFc2IOiCA{9&H`_ zaWcg=GEMD2)Hi45Nv4>PRQCCK%_mEj-!&{*9^WNU9w`Qo7C`Q*xq9;H+9% zLNBdNFSSy=T&2%ydWt1E6~SaPDrRWn&yjT1)^%sn$NMIp)ts8vy$P(26)ue!{-b>@ zhv2R-*IijALi?YUGQK&YB*gXmW^rV-;}bgbes&zK(&{=l^Zpj5bvIIP^KxtPL(J^e z^XEm+4r?f6?BgC1X5Vcs_QZ^F?0+GV*$vS-nQ3P_FLby^E^|IqXKv;*_x|yIkn@r zEoZYBjQg45TZCl<_ucON7%h<-qlLwJUNAmc+KkoUZIx4DMfcdWxru(=?2RL%+o%>` zl&d@rrFw=4zA4YT)NhD~&XQUW1-~K9c;!~DBxZP!j4+L6-I@zQ6ngs>w*76DTG_;f zk+{_~_0f&;C$HQ~_X_I+hUP+AE0&8CPP7`-zwPz)OInvr+|D(J+nPUwj&M^mR~8+f zp!4c14cgWFT6|4sZlv3fNK7Q{x;2$+VWkSctB-hr!c@4DV`S}Btfk%!8Y<$HF9<(Z z9u%$122Vrawl7jH6UhMkIY&X3vVjP0bIEGr#=IINQ;5Dd4*I?Vg1R(|1knq%*5?X+ z&Ee8_-ei;0)gk5?(tuX}0s-OcS*-Ma_en8#U514k%XYG z{t`jr!u^Q0DA%NEvXyh)m(E0-FNUear{2_kco+GEq;kLY4B4{GA&9}~9J2Av@; zUF*AQg(-WT;9w_H1ke=@L9t&_oUFEywKp>Dwqg58o7%$2A*dVK?L?6$U@Q(J%a$Wy ztI1{y#`Q6$y2a^y1g1-ClT}P-lN97;u|`z6afpa!}s~Ie>a%Bow?Y`BN zU-q4VtZnW-Z=wDeKxAOs@ip5o(UO!*fDe0ZX;$`nw@>fwlU_j z#RC!g7cu(RPCehPaP14e$kw6y%0tP5xoZZOuySu-jvTs>FQVcVOL5UmSi;u5e>r35 zM!uU0HkRU&*>wpA_s`2EL$~wat9U)5U@{YxaB`nmu5D~$nz||BQcj6Id{QoGx3ar@ zCEv$0pqNfLWj+)Ksn>f&A%D!0;AP)kFPt9h`^$R}!I?rQSPuSvh4Db(n`IwWLk%Vfpb z&bk}*Gu1gT&pK~H->ljGF5C3=`o@ZYxzv<5Yb#mrDoO+_sC#6CkEINT7Y5xpzKRG= zx$)?odRrH5^^mhAzsc?ghSbfSs!(U5niwPVj7T&wzAZ%crujIrL+#mS5ha-eW|`O2 zuM*J`_22>{X*lKk0D=0e*W{Dfyw8rBV(qmDjL?C&sJeWso@5*93C$iCsiI9!74OG( zOdQQo2`SI;pWa=x(q?s;&AN7ZWmqZyrVs(&^l@;=)Xz&F1;;i(S3R@FyYeLE*&|Zb z0``%NCEc9b8b9I_9i-AZ3^lH!DrTWrf4e#PYLvN3$2I&7m!fAJKhn}|oIY+~HQEk| zRHjdhm5GUC@$NUDQ?6dK>kF=+!o}gJd=}`u0W1_Kih%R8=M@JaV)XX>;d!Mm;*uG6 zaW;I44z~`DPLyCdAE~2obWUxodr*{ABqe|sN-q?*s#Jx)e^8%HIdlP2fK8-4MjR&{ zr4!SdV=9-x06(sTRx`f+jE9p7{*h^kgH*NbCt7@1i1XR+09()}oRP)TpLxv#ZN+lp zd@XFcXT{|&^L2MM#DiP7dQ$et$%QPx00kB%xWK|!{mp-+@@gc@h`R-~9>UbHC-`tf zPE&8gj8}b3`80$q;gY2574N9GpU^Hgijf=Wi4r0|J405Fn6{hYHdPd*0dC|!iUr0w zGAx)me)$?k#RbdFTznioW~fr6Nf0!=1Dvtr-o4jUw8$(V;i;)u8Q5jbI+A+HJLEHS z+irH1c1@$|s?kWsUJ%?vld6+r-7xc#iKXG}c>(y9meCd+N!oO)=WJosOUasWOKZn4 z{!eW`mXhow3>D6Ntw=8xF{|-3NfRKCJlB^GbYxH58;YvV2|`5Ne4-*t+e6%` zgP>dqCyIPf$Et|+1?hUmF^N3T98lwk9JM^E6@)w5)i;#DZ3z*CLsv8r=zvjSTdL2Z zIW6ehC;3Zz&F!(rqW`LTi&rKB74^}VlitDkGut6c*GQF7 zzhV?as1`iO?RSFQZLI=!Aycs9Imz|fd>+-Ps60B#)e=0m$1A|)t2mbZhGh%RO`jcm zYzM6l_im(i`XXpLc*34+HaUNNm6}Qx?;neY!O`J?{c3L$lDFT%6s4@z)pxy2ULuY5 zO6f2U(QV|p9IXLQO-1D7!{aZ}=d|#WwgcU6C#1Ip(P9DiDXSxw1m4pNre1=KzUKJu9|m&Dm4#u zrvuz3hgD69+xWVjmTGQl_u8Jkx1uwGpZo#g2zFJHW8Gg^zW@5w@7MKj{!NI*(G$~U z|3S?>u;J7{2&q90+pCQ+nt=n_jS*lk(c~mS^$9A zUJvnyhRqSm~THs~UT>y~}6pHkc+eV4_Ys1I=tN zF!UAPa8Q`Fo|I$sY{T-=ZUtX7UxJmBaBUD2+5-~on(4}L4rcwJ?S0|S+e zdtmq!u8T$R-rWPqeJb_h@aCY_RbXpJv-8g>lLeXYk9UY(A?qc123{BcKg z2Z_~!Ee5aEzWQe}M-*`myE1hENSg01JEIcywt$Tn_h3820*9M({+I3-KA?LpYKsN! z^;Fn|pA#hSs2QbJC8jXPM;i-tkm6w+dK7u?I@d=~Jf=q<0H@F33k^Tc!ezH$k>Y(Y ztVX8PqIOw87|^hB9bnlU#Nb; zfZG@SXd+`K=3q<^SQTu~7a^w_yly@|#lMy8-1qgy;&Yd0_KE<+?W&~4egzdz7>SjP zUcXvB%J~+r8MKGubgqT3jKJ@T?|w0`wwljB_&k_t$I2t4L9SX>|MN1#ol06B+(IwF zJ=NmSmhAXMU>y#PN1od@1=6zMgi_^kO(K@EzR_=I-I~Yw+3GQCzK8w%;DytJ+@r=; ziir7Fr{N!A`qC$V;Jt(Owb+wuB9t83CTQLsIbAs+(hZmr6bP$6*u^C6E^kEt0ru*Z z*sOmzkSV>?Tfh60@HGu}4@+>J+oHsW*OQxu+Go_d4f+}|a=eE|;qtc;ugpr%{~gxu z>I=k=(r3(W1481Z?B+khRQL*{qbJ+w=~C5RCG5a9NO0q}Zlo*NZy5F+nIZ*}Q5YXp zlC}0|J6FwXpItuA{!%RA>-PoPrbWy^2dqS~7k#`4BvS;b`c2KOV=uudXP5I;=y}$B z_~!bh)wrK3d0@KteO%*df^({fS&y2Y@ra1^+&<9|$RBpSdRrUHQF@0<(a@LeJX)WgdFp4A)-49MZGhO3hMHkIZV!r;?0d zscQedpexyRuhH#)s434PxWvMV*GqEc@Ij(MgZiMVZzWfbXDZ80mel6}82nIX`~?d@ z3;(KJDfxo`rA&W&X!;ib5!-fasTT5rUwj_F_t#ZN7YkS)46)g9^#8=B`Rn_^FR8#h zlaDd=fAh?OFQVHgm@CfzBdh)m;rSo<&zw&rZ$K>`N12qKZnV7g`47I&@4wS`4fjmu zVnFwmh7VW$ZzSV2@0f|C8vpmT`s4F*UeZ`5>;mNf)#49EAO8G>uJS?HTaTHa#~i1q zIzxl?d&s`uTJHaGB>y@#(r0qe02n0BhV};n)_+1e1y|~T51JO>;YkiE)9giEy9}_5 z|NU(I@lFS|Wx@v#Xq`bu1mXVH0l>~s>_klAkmFBJ07&7iwh@8z(n-+g7Ix^Uy!Ng! zx;*`P_1C`_^@r1dHJf81%`l0%rOQaBi8c9=%V71u)TGGTFGK zfIpuwH)l)3Ja9vO%!b-Pl-s;0n5PDt*1Q?*Ul;WM9MunEc&+-VL3xK=%LT#9)f@pA zy%PT8LnGznS_FQYJRJ$13nVk_9JF8@;kt80wEwY8=HpmEw~wQ#aL>%T4xCx`~)|L_=q zgR{BCo;57<(n-vzy6@P9wRel+@ksrDJU86FSj}p)j_7o-S#mq*47KVFE7ugZ&umi&wy&(pf7a(!yq{qR83 z1m9PRAO4laK=&*MMN4eX5L%;$-Dtir_1#&d#=KL@6bQ1eom`jQC|F>z*8AG5pqEv0 zJ$ng~1qCQ>NN9Q^=}zeNQk#9utTXVXDNVA^hK?_V5fA8adjTEyD?$r;^6K=#5TNun zJK@FeKv4EwAUkFK(3wnLmX4&N@T;MAQyySm_Cgh~0+9@8g|8!H2CU|ZQU{z=$AjIV=u zw?W=3L4p9n^f~ZZq6DYle6z3b0_NN=bHqYw!4Vs9iMk1FgbI#6Y$FZ%cck#7OwXuXFk-W_5$1L$*aP2TK~Dx1fMsoS#& zFesQ(VRD-HZrXAj_{N?C7wiX8I*cPXZvv}h7T`bU{3%Bs+JCQLO6$69xVPE5An|H| z(e7RYT`35^z77d}10CNuA(h}W@WGt{ORhY!UARL5!s!b=w&prA2L&H)XY;M4R+F_m z)l7YR{0)E=*var1#ioHo#d<|Mg$7~=Aio{a33YBuMVbuL;($sXLGv5VNP;+wNZbU= zMz?dEz0`bxFcMN~@He(&I#Qeath(J>wKs1d^w_qj_dj-TIs9)NEk_0JdaIWFLQHfD zva0DnAbuN=|3K?G_Z6Y2Fe)6d4{ZvgG*QHKJi$P#q6gTTOb(^rQevkLj=5IfIKLUBxl82aivdlG2l$hCr;%u|woZv5ghh%Az{tDx^*92_D-kX=B!^X}>FHn*l;9Rd1sQdT z>_=Js1a{`@0YFu__A=%LC1Egd{w|)d3_X9vlt1eDIR6Pz!G16<&eMujqc%)nBOU(- zjX%XZIs7Er5-QF1DqipMH-@G9zoxDu9E&xUw<8V)pA4 z-u}$VfdS1PNf`+74guE@l5RgB$^P%)(L2h(?tog}7Rliq2?^ZHK8sfP+7BN6hbxRJ zoL7;bdmz^93MARoJf;JCc=-Np&GdL~3LsAuW_bbm#C2e2>gAmV83r8cwiSQgU*=OlFnb_CoZq#GxW5Nbn&H*_c=QR#*Utb68#-0|YQvDc4FFt?*_|7z`V|O7 zu-|UXHa4Bc0HrW?oZY^IpIilQl^X-^^ykEdec? z+bn0k$QbGYE?7V25&roLnLMx3`opB|Kh1`d*M_ z%0;|}M@vU68vr6BqK$xC!7&v7LF zOu4+bMP7jLZLp|UM}&;!XP*k;?&eOzW>E$84<^|FXZtrx;%xs1BO+s8w5qtu#M_?u z!Jp2ucC;9RSyKW_FeJ+1RKHThPr29_bLO+tyn@e#^F7{rAdEVR0cnJKO)VaJmL^r> zt<5ea;vLv#Of>8N%^JC@Vca#Ig#B0_5r8a5gck#>O4pXr*IEEEay z5A5A#l>pi{>J2-(S1^snPj*uf0wLQPQ;j8sW%GWe*)SYjmHv4v#tT0Eh^ z4G6>HDheJ$+FWa1Rd1^GEIJitfbzoiP;%4&;z2G|*L!q7a6{2@=-X{iX0??>%aDue za(}AUHP4q)9*fQ?Suly#&vLN0cLN0hFE2RL;IO`!wxM*96 zJ>W{+ykjad-U6vTNfPwA9P-lX`mTL2a%`|@b>SY@xu2rstNv~A?Z3COT<@FRzxZoNDUDV3TQ zC&0>3%SH;%WjpN5ot|;_d2wDEN}n6k{&Ec&!zj0Pt@C|S!1;Vvsb!%y?r3Vl2i~XK z7O6XoU7N9m@lh(*phar0$;fJT+|j^|zEw2Q3eQ@4tAr0wr-A6L>~LS4{5s9>D##Ml zi)s3-M}St)Z}?#QfzP$VKhRFU*CxS+_{WkDcsKG(w}zS~LAOqpP0D}NlEO-kwGcm) zlgYW(%Jdq{hUDFb^!4gVR}BNpgDx~X8HcMs>|PtWhzs-H^_YHL*}nh7*jtB1)vf=- zh;)~}`3o4*A(%s!9N-7;gNr}?ZF@S*NP!iH0-8sMzzctT!;+%7x@Aba_ zc#VO3_TFpV>yA%w-I8$7pv!qKqk*vy#)a;m+Wb4rfbS7+E}Fb9KT=GtC4UdwC+|ae z(6}p!T6Z=H&P%c+;}z4-5*l@3iSSSPtw&3VZ`jS7vx&?de<|1D`KKp!$^~vc2H`Es zfLH~~k?frWW@L4s3C)UR@Pt&ae|vWx6ee$3QjHn2sMAF30L*c;T$lXbvPrGUS6Xc) z#K&zX%;TDM^NZ7dp4~Iuz=wOr1KBYgl2&~5edCC`t620ZbDo-u9Ff|0a45)FDKS0U z_HVIpg*0J#<%TLm#%lh8sY6Qb+5I)P0e1cgthrMh`;jgdV{D-?edxyReRrOxOPE=s z91ZOJJFr$ozA#ij>RzAHyYD#3p2@$Ju?#tWfrZ1mT5<~0)j7yG@ruVVpu|L~*Ewks zmGdMz>iPeYaFZE+JPoZ26WU?> zBf;}{fYLsvNpU?Lpsz5sP!7}A@RdBt&XHu?4#)Q`AAWGthB&eAd9m*|$EOFZE$R3A z>>fq6XEVf;9qWcv+;!XEOGt=q!4F}&cypNiR>q3~>XJsdLuc9w)(UM$bH~A=$48YT z4Y7YKM8P@&`KlfV}JB)(<|Rd_GrZuBiWfH5~G;JuJ7l0f_fXa zk!ScwAfXca1(!q;PviDO+-UWbtMYx@qjzKbr_Z<8cY)N+Ev=^9Pv%nkQJNYb_%m$cK`SaK=mx z)^~)X;{D1!W{VO#!S%@nC*0ypeeK7d_Ap#kY_d|e6|7{Isfx$-cRLA#Kimz;D%Zdy zn>Ap(Gq*Oe5nES4NtuH}_#VEnmdW|b0gtoe5tct5Ew2XSm}|im(O%%W)e)tQkuTJ% z&OxUYFyyvpic6^!7%4f7s-X=OWMFiE%E&V)f%nNCPuAKI z(6wKwSV8n+&gBfKm{=GOe>Cf4;4?T|Lp!4OHeNvALqAMNphsmdemlN!2L*3@cu-^W zi97=hD!XUO?X>dW>=8uL0iHtVEaDg)q!<<~Dt_@k{55>vG2T&=;f_FmQ6HxH80z8wBRF_B=w z8gJ7c|H1d+>2f{}eOXGkQDBkc+)-lr&!&%=o=cJBX;L%ceo~Q1Gq+P~yh`u5jE?$a zFUCHC{2;4-++?ez&)=)&6)Cm22331bX9of-yA&$>h!-diM22zNjv253NhLlP_UM{t zWGw>WByO}rp@2fUy-z=^XlHuCG#_iM6D~`6!?HivJ&C_a33&{Z0m}(7OpsL5#{rC+ z+BzeWildS?Zz%&8QDHO=T)i$?{@Ng2w)&b(fhtkvwRcDyKk_rZdJ$ghy7A5MKgvn@ zY+vFcjh4@^%YQxWrVrr{wdq_Al1-C$1}x(A_9#(&swU&X*AirxS^OApsh}2fk1!-A zW3`jo@mOguaHSIe=| zn&uG)LqIpzjzQF{{hN5II*lBwM9{O}qtf?UvR^P)f}$m zLB=P6xu5Zd;Q6Z48l951u!MwHfXun_82vqa&wSz)^EBK|4?Wv=FsMRY*R(RQBgu`$lkN{LB+$NHhqy3x7~_u7Izf!e0a7y zVeRQ8ByJ@{W~V%=2)l=8Msh_ADLJ;n;+m8ODofK7z@N(l@aDU78A4&VI8Q&x@bawD2(Xy{~~c?5<{^g2N}2Zl^|iV7Lswtl7#{zh-%>N z&rt`?coEGZ=O3!@JMLaEkMof)-!Ky^H4zn~g-P$38vLLLDY$hTBW0N8<|!Xt;munm z*(^bcWIm;i{RQZ4Lf2z0`4nt*H&V$$|MxPw%+RV7!co0_wbY(~dn0j4rk4k1@zI;i z|2a^IlMFg}C?fDIZNEl-%b!O1X7M>dEATPAEk!~XA_V-KO)N9*fHqCfMR;3bSH_eJ zb#J;Pfjx% z&4Rky08rJH?At^iNbC^8*QLZccY?t417$OCcP(h#jjObhZx@OOuut-ud zt0&<~OHMx}bNF7?n{H>d0I3Y6&$iVw6mrV{k%;|x2jvNPUVD=<>@o7?Vc$|V%lqWI z2erQ*&MO}7-j(nBTS2H_d0=fGO}QqlwrWrru_DL)5NGk4K>Kc(gYYENm z8kGq^wxUeWjSw9>xM0JPd9E?{`;`~Hq++T6sD0&&IW3F=!l$2pAFeP3q>#%4P2%4m zZmRn{EodsV1xZx*hF=bYwnjGq+}(>SQpZk?lj8eTmcz_!f*Wu1b}4@QJT>wV;ITtwa1FoO922CIEawrMS;9-ANx0XY|AoPmHS9lIgFEtaQXu^a%l>Ac2!Az!)J+QMKFGcIpHqTk=I)9FUG|Fn1&#SG%})$*#T24 zzaN#P{XKXx3qiTv!fv0EyH?r9&HtD{i(CM>i`YKb`1Y^C(G#UW#|xw*8jxlQQSD0- zFuvunuB#;zDAqJXB(oTE3m4<#Tx7^bObP)`hxk1!qHj@d5__NpO2dE6{Gi*>mOJru z1*7Tyt8Fx?nrt|sly@x-_EoOe#7Iyk4=Og~;T zUKLCIc}b0zNHE&V(odWJHUs_V>wsCO#yXlt3n?|d@m+QA)j~x+nAqs+OCSf~WVK(% zX4^uTNq^G9meu|tE9qvtt4X5ms=+xQRKf>hIOBpg*RFf&>AMALi0^jPD$1_=vWR+& z#tHRT8S2vMD+PZ0#XHiwlP`C>vyvL&1^y%|#2P;{$4=R&uUE8PW~a5JunO=d$1>fO zY~Vj9j{3!YfT*;)kMPWF^W~;IyswN?|NU*a+rX*Awt4^MFICT@S)>&! zqtaTg7;<4BlC2uCGMx=6i}vZu^j#XZ@9~&#^q5CX0tWkiQ_-{d_%=alp}N!bFv7^M zJbHDL&FAAjyAfv6^&x3{Yo~UV$+Hv{Xz__`3Q?7(`(P9@GQ$E|S%EA480 z`|jl!NrAVn6?QYjl*7Jf!)v><#q^EQAsi@H(~WyIE?lZ&;njWeZtu;AzBpc6(feDk zh&H`Af<9q`ybyV?Ra{!Ejxf-etDQfG?sn&e)Cl+t24@Ep|0b}S>Sx0)&_c|O^y9am zkJh}Vcd`8C(oHZ9<~RSE?aD*~*pGi?tNi`!zy9dIhQ2aS@5McdR6n1LsiZUW*U^|{ z@~3(^88Ok({oDGgKW28eSEl}*gurhOk13Y5hEfWMUF)-yET=)U-Q^AbZDB(XLds41 zmX`D_NAL7Wq1N`9`8C&;k%YZMi0hY;d3`aAz#k7u#ctZdBnzg@}-a)f174{vmm2Co#kf5 z`?x)+)ID2*U2ZALG6 zC-zFWa;G}|3pw}HrN25By034hthH?TN2@$-a$X78>9%<2aDA^45>Y)f57d@s{7yTQ zWxq$Z&Q{Xjympvg#mW+}7d2jLES+AdZD9sl_yPHn2lIOuIwKx7g-DGE!ERKeIH8zs99jDXv&rG|-e{Jq7UZ4$2fByInbU!-* zsoR!dD0An(>axGEI`Y};*z$>I2`Gd<5-rWSQhJ}|-(AR0w|DHrQ~#l$Gvr2|e8ugPJpBIEjAc4a!hL+NjuxwiU*qkV~S^O$kZ z&u?2sB#iRJ_N1r+~{vErc0G4wgzxB*HKe5IMc-(@$91CqOU<* z-kCYwK)d?`QD8?!#MsymIrg%l`?m-Y*rr);y{Zk}>>S`T@5?$j?bu!;ejYAd-OalF z8nQ%yFY$d5qN1U&obT^3zx4n+o;t?L#eQMsI$k_m_mHDqXxf!j_%IUD-;uG7g19?5 zJ`0CB!h4Gp`yE63)kMxw;UguaCODTtA&~MSf@MRxT`*I%TU!QFY*&Gg{U@EeU)4Og z)A7a)aWXN#J((t0>y!ua`9Zc#?|YUiz7thSV44^%OBP=AW`x@>ec8XcWI`|rJxa~) z<|dqN?B){JXVULCKKP?yycn_4ysgoI^2Vc>lDxuyv3rmSL6GK?1?i)CO&!NOpqu>n z;`z@H?>@@hLzkE)@ylINakUjt<@PtEXMc{(IKMYYXKoZ&h`^-xGuQQjxhKFCX~)|o zjyz^^k`Pz1(k52ERNSo%g|E*BOmHXsZX|_Yf4bGmGrHm~Xj6yStM7a?jBq^mtTH@q z$ugw2+z;OS;dp9%(yQb`e%4?v} z_F&9&Hq+g)#Q$bi^~N!u&P`JXW60{pFL?HPowZ!17H7`rsaTIK&Zy`B#tgX;)e%G^=T1BzE_VMc!J{Nb} z*Pbj@hb_$TctqC=Dv``BYHcI}&soBH};OHxdRt#Z~y_DN`d2AA3SjGc+ zhdZ^(s<$?4NegHhkI&766n%x3660v!ACe!enEHKG6*3_XHNELeqOq&a3A+l|j-=>6 znind)x&W@{9n#C=&vKUrZXWYSh^`ekxf6H<_@zuY%NmKuT=%>=SlSy{$T^t9|G-i) zgxLQ6UgCcLGvF0bx?XXqrX3*NP=FhcK_bIu#5N9igaW zijfpweb5Ym3U!Zz9*QQ$g?k9J=bK)}J<*uVb@aQ3wHF)Vrh|ou1y6k6>5GMC#5!N< z<=~g5^j~g+%&nINqC8kvF;V{4#@c1O1mvB@^S9N0I0#vd@+YEqQE>)a(YIH6pHLrN z&O7&6FAhAeg!Bl4A)xBrVQfp6o~SpL?*lM*oL72ZIAO3?uPNQ(1ZVzdvZsEof6JBy zwX%*Z=uIWl|X&!P97L@k1m6maz{Q(h@CT%OR1g;YH zszk5&UoW05c0^eC)W!TgYx)rfMS^wC$ZCmB>2xVQ@8-$NyW>g31Jo>T?a!p2JHp|Z z{e%I?luAoY;@8f^8=eW*R)rc^faI}^I<6aRFWsSWf^Sdgk*7mw6SgjlO&7~UnezP5 z;2?hB)a6%1)~^ryr=fUdr2VgVqlrFHDf=F7sNnkDwBm}T976C?0wlP^C#L!K+pmSX zLi}29t`$WhIZ~!%*!_4C?y!_6>u*l*g>icA)YvpnS`>;+V=i9X=v1l}FMTSeN_{Eva-R^8h z{Jx~u&t3EfZT67K)Yr3f3XfUUD_f7F+v#=D!oPkz%AudSp!Hafx2R)NjH&TMf8m|0 zqF_J+Pud#4dO5NB8#hDv$(hwTtcK?z%n9{yK~B9PwaOf`TMefGt8M^T1EH}Th66mV zeY0tx*IK|szwpN6cQ+$v5BKI>9VQqwP^Ed-o#1T|S-K504)xPyH&O$)22Pz+srNQ^ zeT?d8uFsBk5qkly4l17Acb(;Z;Mdg~R9Sr_;Vln~<=DNtN>USQM@0)?xd!{}(XRq! z#mMxt)yC2Z{Tr%|3vV_t#+{{6n0ac>k2Jxp`zr@{Wv|R!;M+%K)Bvi;6f~$`TH#)0 z(peT+$u(4?-01GA+=7@p*|;h9nuUQ1>Z`E*81$QEi$lwyns%+q!@l2XyEK%8+r%n6 z`wJcFUEk`@ammq@5I2L5)-P`dBa+=CW!sUdFK7^~NrCL%<5@C4KgYYj`1AlKiHeL| z!S6ra`x6{1^OTv_=hRl%c9Ivjb7zhEctsBYe2|Edum^@fGjyJ|zv}#}4`?fzw(6z= z<5i@3ugP@Eo^x*k$8Jsp9THmg&Tc|!idn`J0q|KP0BUG|x6C==XP#oLJ5u-^2pmS= z-Uo2!=^7+)4xdh966neX%;`Es-jnvfJWvz{-Agzyg~teqpO-%s6E^L_>jM^A&$bde z*}9IdQY|3Z?M|ip>0hpZ`)c~B4-i`21-hC97!Iwq-cF?ePtiG2`H21H2p+Y-55Kd; z2q(m)zrTe{E5zK=sP5@=Habxs`hRnPJi7E3UpnCXyAVYL?B($|aEz^1p zDK5;_y6^uF9w?s;#Zk|+E!?P{x0k8+(O81tEAALZ#qy^ho3eM+i6#YzrMJ7 z2%ke_)lm!9xWZ3bhwbXe#idokiME^V8%JUSOqaxWJBOENFle5;3+o3&a-2RZJ(8L~ z`0}wM!mQa}cI|X`n_tZ}9qnkc^>`CatD#n8UwVZTXG*?OF+_i6N7!(;<cFGJg{TR24;i zTdc&+D>|nJD(eh)rLF41^`X*eD(y>pANZ|;i3DlK%eM^H!2-jb?+kL$ltW)UdbyXI zY)0Jtpal2c7Y6Uh!A&!_;l5Wa4Me%2>&(pZ?{9o#GvEPh1FzZmKlb#)C1C0B7PusQ z&P5tNBmVI`v+@)}{JR3dISucZE0A=PQL_3YG70e-Z+3n_y}0MT+ITv=xe``mq4e)L zFANvo^B4K@%jJFf0KwIg0CBQ`=c_MO=PR5i^)vN}zl8j>Hw2san?Aa@mBPCkJ97@L zT(z`*I%9XQBF>2>#_q;aoE8xqct+CiUGr<90_cV zr9;lIx_!Kz0;@CTtYqR^GsX`f2EU*7janq>CQDh&>)LA_ZC>ua^(adZ2s*bRSH&62 zf)>Rppl`jn@@goQM*E^Y9vV(mRObB+xPC+cseK7rzhinAasp}rb_|kF$`#O#`qP_f7m+YC{!3w5_gI%v+ayT@peHBvVnl1x-$d>=pZ*M}{*1fQsQd z@F)1vJtmDhhqg2&y@52t!bdNv1>j)cfsBt;5dk-dc}8(zuJf*#yEH&Tml#M5*OdSM z5P;Y01#Y6tuC#tNO(zDBYk9evjpK-2`B#`b)q7W|;X) zMHjU(kg7hQGqU%NsRAf7j6=8eA;ux1Kn4joRkV@NFUvfjYfST;=_VlU{L|B*P9Xoe;mK!?%#UWN7pUVU#R2$frr2M! zRgXTe-t^n!m`GW%zF6omD=84h{bf=Sc>5gZN0VUsjN*Cet z$t`6zb_b-vk`jZ z&%SzbZa4DYfR_ub>cN}-Ng*rAy$zRB$$(T?(-SLEgy`2;D%KT_YCUWH3-0Q{2lapL z7o6t|PlkRNayutW*V6FP-2+? zx9?Lk_+Zn_adiQl&*feve$Z2DqE8DJQ<*8oX+&oLBW!wC6rjU8l3v?W^{Hg$*xv=b zQeyyc7hnV_e9B3G7bZ*Ia`SE+)yV$!onD-SV#U-DbX4`fj3#9IEP^Y?2A$c@ zHgrn2?^TbgRru0I#NWbd*Mb0blb?9-^T$oFIbf(lIb;Y7HBC{noOuAzr^2%Pu7}?G zT(i#^ur0qM&3~^A99vYk&!SAAEtVo3e)3CmD>Ev8gcuz5A!oF87Ffx1>k0c9O+)Qt z{d%a~V{wkS$OZ3jZ9eW=Prbz4?%yab*RNV@XFva@J^c2QX?ML%SwG@=PsO27@jC5c zZSilH`oqJU3g@+t0ko)xi769``hC*w#jwPL;;~a-?Tz}xX~KC5PQn|DbDvhz4nyHr zY_?;K+NycWPK&|s%c8Xmzci0qf80s45rNO-?``!6Ifwl#2I8oYqGIe9M)tj7yn|ds zWR_y6m+^sfXUAd%5m#U+OXGuCNCE;#~8DWbrWQ}@dYvqPK)T*fChBzbE+sQ6A& zae#^78v7U_eWB^_)VFmt&8BPk9#&}84bWllG(H>ExI~-B#eYoip|MK;imOV}svxcY zh1L2ab#K(O?EpaKz((79nqbq0P7x)!cis;K^Cz)?^P{4VKHKje1*+()HH?Nzm+`Sy zXhO5DqaycFw)l{Wj5gjXexxaz!3shNj4UznGb3X2|GM!%?q0)a6K7xi!d!6l6|K{; zVPwVDUs?cxj>i=iUBulw-3b_+U+enE9%LwLBOjQCOpwAI-oW{y89J4J{dScR8aGq> z6OU0XJCp7d57)aLn{5p5K-gvbmMU*zeGO1-ZHGRT%+ivnNXr8O3@X2!^j2BuBXB9UjZns7)AC`_>uXpw*g>BI8EAC4J;AO;e`!K%=TNsE@#ll zQ%C&)&!j?|uT3|cjAvZg8zgz}B|~}~tmjY#*3ZCEx4e#H#qNo^(T~}Bu~`zqC>I`j zM_Z4N;3fvmEe3<}B+&p&xEo$ zIV|y>qcJ{36WDm6BJ)9X027Zg4%hKepZXdS$mO+O5A(;;1i`bUey&ph#VE!RHN#h3 zrWSBd__C)|&LpCrq8@){a|{4J(w&QQp!Pa)T+fN8byWrF} z&BVhtA;m(<^0w#2N>Ojo<%!1$%{X@G%nt%E6XpIjxV5D*LU3kZzUekm!c;)716cIs zp<}#f0YFG$b(5FI@e9ChvkW@i0El)cF$-4tN6X1aOys@oPL!HApo!6A2lE=Wfmkt} zL5lC6snkCOLpq;qJb?^GzE7<10f6Nvf&jcWuhY`^ec-ej3iLQ1?tUcZb)*Bz+_Xvb zYv72N@@T3fy?OSpZSv=$`QxlY?iyAmBb3%2JsjNJKk_kXH6!$L_Bc*@uj!~=iSsL& z&!R&`Cwcu`KN`-)jxx_BaH(Lcwwo3rz#g0$_BjU$)H~UpJ1=z@F&t83#aUJ*rI+3^ zJpyV9rg5$yBfiu)wGBQ-rdxQnNI(y*^AE;@??{n35p9WizQ=ND z{E+&Etq&jwl~QKx4d*FNI<%&VGTUr&pG1Erf>Y=@%5oRYgGsN9To7;`u35;rKCNx- z3}+K~lEc>r#1vm~(nmkXDmc0Vn17nRXjiV?EMOhg6$oYpfGc$uoNVX)YakjB3c<3AVUpSi4-zEJ~?k_NlFyME3}bqxG?NyAFCc{GqAK=kXfWb==YNrf=3 zDsI2Qma3V8)t~3H#Crz9H>gJwTxn!Q(m~JYqjAPdE{ zYOKRx@M8;4S8p8tOGEz);Qzd|e}M+aWm!d-Qy!e|OjBI^a?{eyZrQpcIe@Kl)C;7V zS3`INW_@9F-e;|aKUCQq!@1I+E2?WVe z@o{ljdV6Z{Vh!1iyRH)N9%eyq@OI{blgOj=?>_IAiN_q?6}N1?(2`K>8#@C@U6-%} zwqmt`;6O>nRqEt(r5|G=%+yTdic4@ze`%vPkQ)8~E&4`R`ach1@ZcWk7;VS8bhb+J z1>euKqZW_8e&cF6pL5ZA^YE1!uqQx_C%~)HCPLFD96lP5;x<)rH$qnC*}f{z=fkGp zmu6B&_wrY^*Q%w=QxXb?oQvHy8hOvZ14@wI-$6qOmkf8V>O}<#$NYh^am9km`OsBm9g2wS{ZQx)2`p)15S_J{3 zfrtc9m01MyZvvYy6$(0U;vYNHNC0x)!4cR@?aDmOWG{8i63b_t`&L?jy8w+4R}{Up z)NaTLXioanf!>N7$kiT!Mc=_$)hK4XQ!BWh>kJ&|0g#!4YQU2loU|6}fJvDG z2!zh(`v2ELxlde<>Cd9H`p*eb%S3=VAgcrW5rPT9(oq_0Qj*u*k$BLI}jzktYrxFU%i%G7BJn zjRyoL`cDjyPq72kG99j?suako*%3@*x^^}-2~an;L+DNgu#hpD?s-O{^q zpbr%B$3dIsJOniY)q2^w1~Ra4O{?$^kVyeuw8hXEx5NiLAH-?4LG{XbSD3RvB* z3IEx+)cOlx?E6mc7wDH=)SJRLM%j4vuJ;!^T(+souKR&ZjgUG{@%?N;gJ+XYZg;{hue-%e283<0LE%sxZ_fNQ_!TyOkz(EL9Z z`e$OWC!&+Q{@D|okByGkhjV}kmGPX{+Q3e1{buS%e;^@O?-oW*N!Qw<`HLd&7VmE$ z0!Z1L1%U$;>gOZl2G&nn-knGUCu z^hR5)un@UcBJK7AtJ&nAyluPbXwb=JwZ`J@73g;fe<^RrSp=CA&U>!PCtvkFc4tJ9 z##_cf0gM1p`|$v?-O(uX>HmI-WJL-f-+4&U`%z!p@{bHhO6;^ zRyO$iz9?r^?Qzu>d%5|0d~ci>XoX%1zGp?>R5uz^%nLsGd@V6MN{>3uY4b=9WIfc6 ze)^4jG*e6a`))6)W&0|PA}R8g!0Qyh73XDE3-C;;v&&hy0ilPyE1HHP1TiH^S`I7| zYdb(nNDc%FNX=8tk|rq`)4Nv=QBU;Cdg+I0AIL(zf0C3sFK6YQd_EZ96upOkEB#di zXy=*6BRgB(9KV1@=NWNns>mg4M?pGT2;MOx%LMew!M=AvZ}fL zkS)xk%jA^EhbO(dcbg96~o+{ z@;{xj;Q8f}b<;n@-wOH|rI~FAO&R~fKTo7+)_s8A3r7|c@CJ}TbbvM=5e>>4T;S$r z@%>q7<(3}g6#cA2C{JM)(33{5dsIv<9DlyhMmCVd)rwDmFzUF?Mt$kbM3(R2(@c0D znfX{WXdrzWL|FFY)0A+R)%>zv1nn7{axDZ1>TzBz5;T{%x=mhg{KL3D4&0KK!@0k=6nQ770_wxK`MIM#k*NI759x_$!1^ z5Su%C*s^GWJ8bqofMJJ%I==RCgXaj&b55Bu3)C~@p}dX#+7^L4z`#093bGRS*%<~_qU=Ro02oU#dUwB zS3$*9l^f{}Es^6Q8mkX#XCA6qB_2AKCVXtT0Eg;#?{P3@J9hJ369LDm3N%8j0qJ+- zwWd`7I{)m*^|x3SaAouA4zfp*5&+mHv0Ic%kZf@`RJqe0w>{9;zl6A$-7pVEiXjby zx?xiRDFycgQ|dPg(oLF?A|WoiNO zfeuss0M@vZKXB{Pv)6YI+7JxKryxhYJyZZY|wH&@C4h$kFKb%ZDERv=5~PlyO3Ay^M!RCD-(J-i6&Z(QJL z_QJPxytW(g8kSw+*9c*lo4#qEV=T^r!#8>CUEJ44gwd)gdubbVnz?h%^apzPUR-=x zGB9r-7)(BDIv!D8zDk2=C6485PQ?1Gfx*ms=_+I!8}J$Z94dQQD>7!1e=q7bfPMja z26>qtRiC8tQqbXbj@m)gqG;z;4KNCx@V?%+Wh8`=cwf8V*-q$~M$bTsFlPcJ(t$;D z%sx^8YRudk>(h8c0lVxyAZTuih&>w-j88>@ zUXTNyGK(3v#~jEjy&16lklbvU0pw8Yw!R3tGI$~G+rvr=nMU_Zqdvu{A_q`hJS(hE zQs|9X%lj_p(A0sJ&(c2lecm#3;P*v?w!brp_Q#R|`t*N9iRJ0;&iaGFWd_Qn?L3yCd@rLttU zf4m62LfMl(G#p%(;N%Ul5%!=iT#m$&05l4Y4qzTm4U4eRPnKUsJ(atiU~7VdKiH_T zq=Qsj33Gk1U0z{04FYvkzZbGu$T zcNfeE>>ACZJ*mHW`N}GPAJjc}e(9efg(HSCvpL(YFXiRJOG+E=&tYzeZ*rVU&}%83 zl!3(gAhjJn_CnLoTVu^i;|N$iiYI0Ir2DYVc8~R$#)z^CNjxzF>L<(XU{I4H)fLF? zHRAVbpz2)~+nCoTUo_3gL-Ddt+=-3;Xz*h3nLItx&27*aOhxE+p3Wpoz^kIoo!PXj zG(JZqN+?$%Oj5&TXUY;n)~I0e1^wB+90#_dz}wMOa*ft9>N_j}IsP+?JPBMAT}z^t ztWa0D=)3k+q8TcRvDgxv(EIqZ6XVHD$%bem!ej(hnnH6n&)&rk>$K2}nm3h9BYOjT z@^XoWVHWDvF##irB1(9UrYYq^5g)9nxxX8Z^1 z8_LkQtaoN@%fYIy3<$18N(WRg z(pn|Rmft_wjTY~_lpA`tB}awj`p~)!S){-Yz}XigYQ-xP`xErizt8^8!Zbn ze3L+Z)`THCP^xVXl!D?IO1L}G;Vftq`}d$pnk*+gD_5gg*JLzYjt0^3>p{xdab09+ zu3Afa`^!@8Niy_q5nZ%(YlTXi9Mc-~qA#hhjP@7WDlmB`VwPWMC2LXL7j?&pdYFc) z^N({@amRr=8+?j6`qp{asoz0&>3lrQ1o!tJ``Xlm1Y5OA2TE&6%{>5#n>| z5P*0sLBC5uGJ$JB{h6r05RX!eLU*;n1%hVpBy>t0$S# zzvJXUePVmXqn&)e-amuXZ24T4$Abih4e8NS+|?(EE-!)!6zGCgvD|R1Ui@%;MYsJe ziU0;vTucAMzV97Ffq@p(ryRrCK^C6W#kca1WevvmXc4OflWtZ`9%GmE^+Bx22sR92 zyR^o3?kRP^WpRwNNfrH*QuLGF(#4Spb0D&-eQnE88$HjN4ILx46m%oldiGBh{BKE? zMm8flC2CqADv$Tr=yC!SrMU%okWB?gu%fi@Z*fe@Xhdi8w%tXQVfKcQaIt1TTKJg# z0-(2+9oK!4ZB)H|o|7WhK=mPZbU#i}0z|Jmh#A&+ph?a+g>64{^zg*mO!8JHS<@PS zkTz=WF;q2j0lhie%2MVYyJ~irK?#_*;iaoCNaH^?DD6+o5WYp@?K2V>7>)s0L@~{b z*j*G#bq_y@wfO|w9e*+tF{kFyFeh1A63d5@Z;cRLOy%_Gs>eyNC_ILSbzyHb5S72S zF3z_;885Kl@xt0C!DE(rY0K_@I#ADxgA%0fJ+Fz0<;WK$92v+YDU*5~7$_Vm_8ki! z?cyn#LVe3r&K~w>(u~46r>|JqPFGricW(DSbr=Pfu}r&#BLP@O1q+hXLqz#Hu_sFK z)Wa8=H<||2O#(0XA@S(zvi)yy^(LNcTdvDpee&?F%%3AU<}}xQDyh1bl1ZPrrMkeU zUuM1O{L7G~TP;X4cxy&HgA?E7P|+fV*Z7gG9#kAZanhqA6tj7(7&fNZZyDNg^^P%G z^Gr%y-Y>^bwHOn2EBGKPC5~jRuX#{(`^%9>iExMrr-&rb-y=6R{E)w1oQpT%xf3^(}G668MoUUSxgtH$jC<;w%}b_rjrFOS5&mTb-Uhgi?o`zZ}-YC zc@x#;T>fO<#5}ndAby%vfd2#mDpF_`Ny7;8BoL`M%OW5yvQQQ~F7>W+&5;=zPNC z@KNFXNBM;SPR_0w4gL^Qx{LH;DCrXC>lBkw*0@4F$$?$A2Zaq8U$$N)_uWljU}w^F z3>ZPAHYk`9Qpdj`#n0f)p}XS)`E)68xNyz5ubTG(IlWdOJeFcB@2iTrNH>Iyo`%hB zEy-RjiS*w_) zCu<`T;%6axKAhJ)^1Z6H6h=ZFs8M)!&JQI0UL5x?SU3WG()aeN*i&lbPgyTIPdB{L$x=?y@D|j4Ci+P@|GUkDJU%sE1{x&eb-cE^w;<0DOBalm za-_A{nHF4xr$5NsX)C8bXnT+7`}=JE<{4~jJ~IBJciP?=+t=?N6w2^7e|yi;f&e)d z8zQZ~T+2c0kjS%u5fz{0Q0tG^y!~-`X!J5PZGl~uB6tRGRGkS8)%HBnAoJLhZ77xz z{~;w^8Z04F-Y7k1hvs3vL1$E*OsrwBMkk5O15&K!?aDrrGIwt${x?#x+?ow9@s9Ml z;vMQG9}w+6)HbiOR9-4Zr@G-eVLs+0VAA z6rZUy(;$_<`&hjzAF_#Bff?}oW)D$!B|T|xbY$7#^u+q~N@w60YbwE8sxY36x6ffl zL@(T^D)q(p2#jU zqn-*#7^Onaqo7bMdbEowrl98_>SMy@m_UiCRBHIk!>`$*?}sZN$fFNqqj_X~3JRa* z3G(L3`YT2Ek9hl=#~&)z_gveWDusf6fl3nFPKd|m{X9cU50{Yus!tl5MOdCYwctYPJx`T%QlXROQ>MYl2W1`p3r)YfG7oe4x>NIIZO?|vKFO4y-W%Nlel~dFK zb%Zv34$dVF+E*3uH)0C@=h*Hak%S7U1}sB-B0QnVN<}sHBk?T9Va+t?({xf@shop-bWG8N612TVCA_qkqP zKiX;p6NN2Y*+zj6GC96s;~1;>6lhVC6tO3U?} zg0eHnNGS4rx<`)3USSHFw54K-a@x`S&~twwxbyQT2>A@JgPH!OGfQ`Yg#;761|gPr z3urnFKe%a8&U>{D1XmAIp?(R{y>c}_j;+^H+pilv_UKxdbRXqmE6^_@IG!eYIyQ^4 zMjK)g9Q{A`-aHV>_I(?V5J{9uWQ!t{C2KK8sVrd>A=#pmRQ52;SPIEn6xoK#zNKW# zRzlhLB|F)dvCJ4|F~95Xd7jeq@p-@B_wV2PPg%x&U-xxi_jRA=aUREU-sL`dLmdM5 z$37rxQ-f`Dif@&^=;sh=9rpH@jFgRs4_zT;SsvmVT%5Zx<>}k|bII|Ma&jZhYcw%O z*K1Q3EKpF!v;t9#tat>?kzILOFbmv1`$Q!ZiJ43Q)yE`&wU^?mef;T`dz0RIZ}%o9x;?|+0o0_5QAUj} z*5O)??4h$fc#GDr!3L3g7fIct#czaoWqp|Dh_43Slc^8d77%f^k!8tbLBTXQbQ*zEil>W(Ds6Pi?0i$RF z2Uc)-$4^!x^EQZ<4+NG}LtV{D44fi|?s?&JiE?Jitf! zWb)8oBeoj}I#HgQjAK7^RdOe7Aj+cNWx}{^*b?GZt)z5+cWVpKoUuuoU+(Tq7B_Uf zJJSjEC!eMHbbmp9roo$L`*IK)Jk_5?sqk`@|5;9^(dC9=_op*QUvn(J99)Uk*2w61 zh%5s|$S(uW zGcP_jskmF5;#{oDDdzs-2cK(d{DUXWbXE!>x{0-& z_Ak~pdE(^@cf|i~@y9qfYdgzfi?Tb6R|qy`?{>>P^2TQz)=%}s&}qdOzj9Sb7ytD6 z?BrQHCI8WzYjzU`_k+)|Y9Z65LCk+nCC&^_Cm(baY1>|v*Q4B%)9=t$KAoqo`^*~# z<1SvPo?z7J`%w{gNM1Zgpz`YRJvW5RxegTTmODb=mSo=n6-3N1beQNxh zvYwalZsOlD#Zd>8lP z5!AL<@?Cb(c-~P_GFR9l*CDYmbeUkCH2-c^!Ek0@fecsrkt>%GV!epJ_MaSGR#6y6 zv+nyrchMyaQTCas$gY*S^^WnYSJJZndOH=|)q7`>6+E5*_KGh77&Y*qmR2$zC>%n2 z#O?IM46U!{0GPkWEpU%Pk>M$HaV1K0JIgHNYP-d2@xV!e=I%S_-JRnK_uKR7)3(dB zj1m0PmrS@R-=QP&9?vu&>bJ8JT# zga(Rowe}t(sGZm_=SGb-Eh%J_Wfq#B_nsNbJ*K+94Z2=3%VDh-YmZ% zXf8+Xe3VL&=~9Gg*B_;20KaW|#=w&7ONjKTG(rz&ne^^NAyhmy0nA~ixr!Nh0P6L1 z=&bgW10ja|uNPYjG*@Y23Ð%bt^(+Sbp^yU5K-9EaMKsB35g6`wXx zjJ-%&%ieNN{rzs&GxfGP4^ppUh4U;`3sC0gzVl$ET|#%~`z@>PiC38Z*T=NRa>$HL%90-7l-G`I_aeGtTa=s4%Y6$NLs8F&3Qb#Vu4+D;Vl?fc( zAgVp$H+$n(k^QfeXWjni;LHh(8lk=KMPwsZ*SyTjeGH`dJGO zDnL)np)Tz z3;OeqqaA$=^vanD|C+S_@~xhz#WpWZ`T?^)Py5#)eGUlN5Bu!!2PL4=AH9GfQ+OSi z-+_u9`dEw|U|(E+dj0?tz*KEpm9!~Apxplm!19sDCqOax5L7LF=1#u+`?x+?D)0Hu z!ad#{U*UTUXqB~86*4G+uA4)N%;q}+t{Hgd@jwOi79higO0;r|t^FXL1-u$7=F-*g zwn<*pji2lQsIFG{NIXx!IPLy#Y70c9hc|9Rw-@uiI0r(bsBIz1P#6qFGe0TU zQ1_%HfD08zc!C7%GbmDU8<;p$+k?7Yt^XB(S35w@pEx4V4FfFUi+A-2=t+6lIN z#55?9?FOGS?*SmMqhL0mB}wrj4*XiBk?tp^)8Dfa3 zJvxl&@^64BE^DBYa0uFHBmqCwAG8{L%Nvj!r*oATNM@SqlhpaaTN3$)Mb0=>}@ERX}{m zi^R|D2bgn#u{-(qVwSwOQ_Jv79`pFO9I^bLLM?956RECfQq$JtkDT@Mq>>myG*qh{ ze!H$w<@(3cvzTF)j8j%U4z?r}ACW!$2fuf;0d)INP=4!$L!B2}8GH7!-7;GT47e8q z!ZdS$C3Tt%>Q_=KRIri*Kw0ZFR5!Su{M_J4pEQO7kS6XZ4kHVnMPTn904m4walq62 zI=BcCw_OEEm$o(A(bkUDgarBg0H)GM=0Hm85DO6)<^X+a1hjzI1=tnY!heZ&SQt?KXG_190Ljw1*@bJZ#az%|JKJb%?j+APwfz!yS{f<1%-9 z0FPk17vhb>XOQE(ZU%*YZio9kb^Zj(5Hc3@Uh> z`Tz@DX^9*KLf$FNfWMYW1jLwgp6L*2034(dp!y1B;RK$_`v_;yIVbe|Ko7hOhy3ld z8z$Fi*MHH}68HK5)=SOw{2DCN=;1fbRlRPd*Kkgr@21uMifIHLKGshanmTMB`$(plHzt z#Uo>H-nHuf04CY;-k6Uk#eYRv?K#_EJ=e7EOt0Mk5Y0RvxcL=cDI+*cZBKc5@#dNR zx)xk}6Qh*R%s`C|8L%R!X*_&~aYwvBa_(rYDnZ;=YCR6fXuOb;pr7D(pu}bN1@qtv zOm(H*Dt=^w`6#l>$%_BC_()Fnjj1OIoz7CN~oWLBwxBz&m}2q#YC z=KBh}7%{u452+*QMx8@b|lggHerXK{mv_ijfRj0Kc zu>sWHGR=;)uEY-#JCCeZhZ6zCL%gULU`X6AjPIoDX0#r-IYA;9&rClx*A{rJvkgOt zY}>~SP?5c#?)%53Hqh0+pVU&`@c(*@p*O$BGKk(Rd2j72L$s{ON0zb;4ZjpK^>UfZ z7C72EFG!qum|_!`2gH>6PDU%gZ<@>{p9A|VC!-vU_pj88pFny6CanhTwUUWO+< z<1#3G9nVv{IrE{%v$;zeqNQ<}TY#c|$PVD?V|Rxqu6R&mzRwWeeLI_H|61ixZ=1tP z1$29>(k{JTHtZ%g6yVSR#lxz8d@z3pWjMqaEieoS5zNp#Vk~?Eyyjfz%9>8^U8yXv zX%~Vx9eC8#JCfBKS}y*U%0$qF<->9_;MEj2?^>?_r3Qb%Qxno*g+f<_hK<7k+|TOA zen()H`64Z^XxB^xHWYsFJx*z?yOX|EKvlg6@fi?OcxKR5_aU6CfVLEZ^?5JBP7mem~*eU z`Da@fQRWs&z4J5gg14XXn8-({u0fof4-d|}e~r=xYWa}KpA&%$|7 z-Zd;X`aXc4eAp9sVmLhV2DBit)yl~=DC7bZS#!hBlwVJw9sO*UAj$u z7?|)cd-zrw%mHc)2{=ap#u%*H>J$t}lXAQ}D8CzDvle^^OG0){&zI`Xzn zQ>=Q~1o*g0=~BT46##Jql?eS#OK-U`Nh`U4`@9JDCiACGQ>-S01I0k4`$rD@!4OxwBe zmnw2)r0Jv0kC^zQ!;6RB zu3S&B|ICEH8u@M2Z@W`pyU{RU7_fjqz_K!|l@`)fuh;?B*mclxXau~?cR_J3w|1g+ zbHZvlMyq}QKZze$;Q$V)7XKFy)G)uD!f-of9p0Rqbl zsh8JhmU*g5+7-M)El5u9u2; z$4*GfcYp=VPPO_;w(9y6;_4i>6|qEjh!%G_;krNPXlCBS3_MDlr3{{>N$;KdV~sp; zqOsm=8hzSjMqkd>boJVURQi*P0W*%DJmg}H1(jNKllwo!8s8MFoEH5RaQYzk-d?5g zoOm=^Em3NtlZ`V&_%B@ewUU27$cazs7}X=(5cMI>w^?8R$~K@iEmNfOo^?2t`Zd}0 z9Luo0TiNoqe-^{<?Qyg{vL=igzU`o}LT_4nPDq9JGHQCsWp6m61~{QlEFziQb> zXDsV?)`;QPHEc23f5vTG0y6IxX4{p#{^w8o2pt9jKn)WH=A=K*`1`s2{Z&gF$o~s* zT*K>IRxy8n@aF_E(QIGS9zAKq_`ev%3vn=tki zH&3pvi3Mm8!(6Hk(O#E=(VK3Y3a1Z_bYs=E;biQZiy(x{oV&}qNx1cU1}Y;N7uC9$ z*oCydiT4})8dIVl^CIcS9q#X+MPhzTAF8x_7FB)r&usSZp-2|1fV%K!&=*K{og-%x zIFopm295ba(9~<+w^%3h-^sj3EBUShT?bDJXhsBxoDz?qZh8>C^uzMnnO_4^@i|LN z9{h?8BlCX4Mv%>H*eb$1I?TI~GaR4xZaF=PDo1I_c`i+-CU-SlBSOiOlvT|mKuj)v zrrr2^u3CKQAp%tkpsc)wc%(zZ>t$^n{{sQ}Xr)pzImspE<*l87jj|hxB7P>ifXHhm zhT;2-3GDmIG3@#cVm6hxrRiiz%fg_wf{if}*mAAhVOp%cLW>u9jNr$Z>5I5w25s;C z_}g&d=Rxn#T~16O%$-!2ey^(yG;bi^KLF+Xo6h*p`}h?t*+G_m>02blDwBr%>Mr`% zy3cp>nZt%$4Yr(p?{0G66O1UtZeh<>fy%zL2$ekey93wEQy&)nQDxDR1sKr$S6-v7 z&ix-ha|BYQ=1ae~)P1m)XDU131S|C~H1@#nm3 zU+emHpntZZpXZu6rYn9MGjLBX_Y*lQxPJ4P!vQ5inCTDU|F1tyJIjA491*+UxYl)@ z#$$Or_abT0l!jhTtBmF!FM!{dVw?l*cOLUFr>$=I>774z%&f;3{zLdadivg^b0FP->lf+V&i`(iVgzPxGf(w-6WN~VG1NH$pxre z0N~@x{FMJWfIx%=f+DAY-tRVOq2`&anmoA1uoUqayLo~vwhf*Bb5H&IG%7rFmzzm| zByr*=-yDQ#%mBj5{vZsrv1t_`Ie7H)R*Z-ifQh6KJBPc!SF&zCY|ATp;}28s2|xb4 zg@4ao+CvpNH$*e(>?hLPeWuZffKobg`)aR}_@7%o!(#UK%?JH8PJMor7FhB=?@1Ie zl#0NYBG%tw>6X654#=S}1Fpv12Z2j2@(x5EUISPm*O+}fPRgH^j~CdMybyBQ4FMUz zKF9jXcrl=FR|y0i-z%gQt?T>|id}bco;(66bk476*_xLE5&v}%%CmxSb~4`pck9~V z-$1BL-^$9Dzm`YzUho*}y_zi8YOE)8`04wmwW&ZO?+<{#Qp@ej?^ybtwUvtwo`K!s z1{MuPpcq>PBlNQ~+Q(=zL%}tKe-_&so+flqA3#B2oKq8%pjv2FhGg)*PwoaEO;`CL zjN5pRXL|EUm=Mqd)3RP zICodXB-H)58QYb8t#+6KM2b-ldZ(};D7{t$x>tM#`nWv?p!dQB_(uMNO2JSCflz~% zjL!U4;U|0e7>6awaBX?rsN_N1jPPR!|28c7c4HmNe%NA3fNNU)o*QjrTuzpb@|P``IXD2GpEmE z3SNS|YQ@zMZ;fmOmQzkX30(jIdjL7MsDBy zffARX+E>Q~F9biXr(1$5|53ngVJsTDPd|0G(I67ERB`p&Z@?&)oqu`mTf+lxI}p>e zhAAzpH?#u@$iZV1E7T1_h01mx2q}c%FW37xA|Ir{10sme;C=d2{_zMX=O@b{+mq47 z1)zkmaf8GU5Yl?^jz{)~uDbYZ;!d}G_OS3Gr;?&EE5k}mJ-2=;(zNXb!#~!EW`6PC z*Q*3No|ydvZXt9U08M3(;TNy9399F&9pt zkDCHk#o5?pxDt3IMnE$3B=Zzs4lw<;!_;4Rd5pDeu9xFLx)jso*)V)|!FSOYej$tF zNF^|n*TF@G_1UACkLDc4KXZmKOW0w}^9M=Hg@EN#L9DqC9Eiq+=zBhn}xg0L2Wg%L{CpeDviCKwEj=Q|WVwGuqh4BiJ_KUY55YVHm>A zv4^-WlE;DS?Nlg630hdYirKULN+>GKty?An0G{>U(x8z z$`QA)Stz4SMX5LQuU5VH_K5Ph4-6l^nZ9=pCKI3p+e~^!CMAx!IqB{zGp8JxXaQE2 zkP9Nc40Lg<_;B00vI1~jI;#y|7us+B^{{a1B|Z}>_glWv4Omf-BC<&gK;$u*6B4N| zrKue5Z71O&?I$7Mr}&%bLo+5T%!4kn*k35@@8=49m7?ygA`s|G8$(ykn6kG=Og7bR zHIZ(S@!1}GK}nrqNqU`j4>_;An@9r;xCI}$SlNtjgg)?XqU#J*TK?JsfOD1M81EB- zW9;Vyy&KiHc@f(&qe$B4bahM?3qTYq^_8O{ZQU9aRG;`10bP;=H(2r`pkHthjT-GD z9}0J=pVj@Fno5FIY6pnW^=!v=+jXWqfNeW}Z(xb(D-W=Hz-Vf>zv`#g8%D(;`%v>}rkFO{B9e6T{2l9(rGV}4b zDslIHEGEG5cnimwXWAiU3uB4ihCT)|%7XOw)%Q*bmGw%QSq2`p>|OJH%FVcUG8NF2 zjxz`|-EW`rby5c2SFcCl)b(bg9jC<0=9tph=afNdW%Pc}5TqpW(3U8fdL?ClQ8m~( zf$l8Rni;4!6jyq#u5~Ep@T@Zyw5MH%=oNBqVBevJoS6jA(n($t#FQGcCOmynoSWuK zxA;EL|EQ|}u0WqYeZF+tIq9QZxw;%SD$77JCe{^j7X~ty*q>_m`f52Nd)B?U#=_+=_x~?t!hi!2NfGhgp_K?A8>hzr=)l!J6+5)%`kX=)8E(NSeO-euy{=*E`=bfHV` zs>*fE(oabtiKjzCmJb!ZSq8O?L*HmG zmI@eYB|c5OCAWu-1Qdk4+wVil=)1R7RI-gugWcF_TYRG2N}?T@GpRI#WANHO;4f_D z9hT6FD@c}?_*4c}3KE2G9xYNAIHz#woc3Zy~hU56PDoGgX=+}rDO zdDZ+_YhP^QsWXOLvMquMyp>mjz>a#-OxX7!cbMyH6c>Fkm#k<@Y|OA+ZL+KLP&vv< zCD&+dmoEzUt{f8i`f->YY>vOQbD16Hw*%C4>T7jJ>GEH)D;*70W4+PUTI4&}L??^@ zO_3vy#sTj(DP0ZT&}uX&Xc}hHsEIo@(yG=#Xrsga?#II@xz_fVj=(=TM5?6$&;R(^ zvE;$QAJtK_8tYAX~6L!}v{|~(Of`De#Sf}es`zy)WfPMa1I_w= zl&y^hIZZyfct@oYcA+w+Mlx=@;8`}6l*4Dx0%^f+4OyCMM&ZWr=JlTAPvFhOz1^sVZ|teCOq)IX$(}ZJ zF6vyalfQ|uTNLumL=*wil+J}9Bych~xiaHZ2VgmRShTPE8z4zlVxVX0k}8$+xx1G} z)xWwa1>pR`t8+)cA{JjL^$s@mmg0<4)hM83z^-;K(Nzj&x0K|n95~pED>=$1$l5X+ zz0GQ7I#{GTK!qO`s6kgb{XCB601PcP&4;9(>_6r6Es|0E**gQe+wXl)O|fQmB6}Vs zb4Z_Y*gIYsZq`oMX|qk`)YM44zlHT05*c9~7O`sh&Evr_2igpvJ?0I@yrt&d6 zcf<$*m@}AIQHB`4Fm! zCh|Tj8uZ)i@{nISu=V(&xQjAwxi*;OTPYD(QiV?mO^KX2{mHSe@$vqCEZtj;^_#bN zV1va4>3KWLmN@4Vbw{J=QkcF+1e81x`Gmb3SfdEyEidtlz;?y5xX4xSmD%O)gNJ?3 zQ6@|{jg^mHI68cq?Mt&z3XQtUQ{H*HhW9Q?vGN}q7&)~#&x|UMDQh$*-Yw798r#No zZBZ#PtA9uE$!AR%hJCn{)WMb(pD!)sxND+(EE2bIRUfLJeu35IGb+J@26jljrv86>_porF%UwiE z0{_v;X0}Ng%dZL6t83i0P$Zj^ar@=z@VWpd8nvbnep~db20BrVT`vdO0++)tzg!MG z^ERr6W36R7W~77ZK??8K`Z_aeg1GmfHmpaFcOul95l2SGl?yXolyF6wwKFTnUM|y| zeb+70=`!P<6gh*uv+t*U)_3_cw-(@`@e3pR&EGJ)if;vg~btP@BK zr|q-h!OEy#f3*F=<3uTX7T+TI+ix#xk18GWDsa%u*fDMPrj-$fe?LBYu%B;z@;U4Q zQd}r#&UO5Sh-%&*iJlkM$D7%>9u8lqik+L{NvAoV?%~HviW8iCsy!|3;sD~xX7oRa zeu(&DEp;Ckt|HnQzRf+A9S;8kG>GAd#}(v z4Bb1D&g_%23Q&c0=y9UerZbpkxrmr>479MXWB<~q5zF9=lbeqVbB$(edC*L1?m+U-8A z+b%+*I&JmdZYPkRR+s18hIPlAHSMx#UL0SSKvtyI?9oGJJ=v*$guPvoE&ryvqwfr; ze%@AC6Ns%n-TYu3R$na7_yF`bcH6kdb<3V-%AqlQ+GJMdoob#{p0X_Rn11uRa;M9M zcy$`vu5L8}^=6Z0x7PR6A?k*!0_gZXW7X|o><1OkBzb5A)my>?S`THoqxFs17G9ne zbn(Qss-4d@OeW>nDsy>D8t)(+V=rmL%5dY)Z=Bhucibzr0T?5@Fk#s89lahFECZxXb0Z^c@Qu=pTy zU3|xJ3ECnR{Whqh*j*7ih#S5sr4enXQs-ap^iJfXDL+xrBhaLVuvcQC*Wr&WZl7)p z5)NU3LT`m&)W+h54F(WOrfyU{;)qp+-P4;Y1K6%qPrV{6y*-F`-9*e^*?Njh9vK#c z8Km1@PE%T+Wjx5Plq%j%N~naj3%4+rn$+=n0ET#0r-ko5o4cRbh}B4?)YGcrF`y7$ zfk0nI$0reFYhSl&aa}G0EgGflHsI-dwsk8GaNrtpgl;yU_&BgbHbk|^PJLG{!p=TN zP^6;4;pTp-?v8`^F@vM&4rf(m3X;@KB>W>0KKHsVO+tPG9uq6YG5QUeZ74~4hIVGj z=QJVSZlP`4j&$x=t&)D~FQDc3RJ*rTF-^56c{XABdOcp_wfq}=`Cnj>q%0lxS+6^3 z9$H%gb2et)7OWDqv2>57t|AgcdE;!>ZkG$L)e$^vC-Y5BX&AX97>(Ly<9I7XEHuK! zVy6P@xVz{wr}HjaPPzGKG-2JfUeo#x?}~tQS2f!>R1H#xyCWHfj}d_L5>LQ}aOI15 zLB)#xUZ-P)S}LIwNJJx5sg-Ne(N^JVIo<9*cY8pLZNeLJW-BhRc>kwiLDb8QArX7LoMk?t-)(weAe7kHLEkSQZ2w96p+9#=x@AuFg9|7( zVDMfAI80W>dWdz)b>{5UR9Fc5K0s~`R!(x(tJBGRRu@!U48Hk22-0_Vr9*a*p&6g# z`p1qe2uzi!iwMT#F-3q3*h&jN& zmaw-zT^Q!$jzsUZ5b#D=Jm;v-8vD4f6w!Bs5b;9H-5eCHtyDsWC#+;uE7?1sba6BV za>UB6RPxb7X6_9ZV7utO@>nqR7&02lZUN^+o?*5}0`^?bK72m)2(YfOk=mw(bwiee z*UOokv>qr0t*=4v0yC~B*1w_J%G36nC=+eQ>OmC3bzjV;*TIdvI1Ok zmC@X;3~y;?=esC#WBB`iP25gkzyxKOxS38d@%JZ0t|4~bi!}|X0*o|1GqC?a)@`-6 zUtE-cVVF~I^j>ciA4s{EjOei6u8Ce6Qc$CX^zshrSw|~g-{*1ZxFj`P3@}f%_sU;(FD0tvMugSp;Y zO!|>`f&SZYH9~HP@Kuo7GXw5U)2;LmNN=F{zc9R!@#v3%1c z7a4(3vs4;&)6}Nn^@n2P0_uo?lo9&oLT8NAoO7-{B~QQ&k*Mr}0Qh4066cwLH{wow zW8aQ(i?r(c`pd|$N&bb2w)D_asqoNIwaumVM?h(C?PeFSfmEzt$E;({8aI0Y)|qv& zc4MYfqr~~{&eE+z@-%s$yR5VM4N3!Va0$C#`1(x44yo6Pr;YK1}?wG$WdY2+~OWtOo0(W#7q1 zr@93cDJl<0XX{PWW^T`1H93Yzo;}FLJER{~e=mS}rEwC&I@t@r8zbTR`G;7}6TYWS zroQh@D+Bzn&j#1-?Weq4z7AnFs##Ir<=ahkIno09;WCL9bUT|uk|>!{;t#lI1Sgxz z3^9S1q$IBog*7dWKCStg-KSv5i;5_`$w&5{-?-$gWcyYNp zhBER+9>I?iQ9m=C432~Us0HMIxPFMScHPVXtd{Cs0Y5D&0^T{kOoZxrkEpZ_FB!Y(Pa zb}?*}sE+3;LfrgZrt2+_YF2cwd%4F5_%iFm%bre)07}{Q@oCd0@{e_zS%=@z@sfX$U%M4{e%pYS&g(K8Jl-hz%(~`EGDWUSam8iD^6_fq z0U$K$$t+by+NYxA0$eAaPZHbT`Xs{3d^t}iRK880W|rjHM&k)cW`Rjv&EU0!YbDs| zdZ!CTk0sQ|2EX~lxNlb&#M07vXl?cM=iM~U*rwVWb#W6k85;4T-Ghr4(+te#n;bVL zW%SWR$f;KGk@EMg5J{g4>|a?YCi#k_9s+l5nB$MHJ?x%P&@7?Z+uV@es7q{MfrB0R zMdQ#jX~`QT=mmlp1f;>NVa8o2dQ+2{6{KQofA=Lp3MJ=3pwrVNX52I z&V8iu%-@nx^GDvL!p;r|U1VQ2I{E)ngn{jpj8c+__@gGO8v-hhck&yyqB;Glg#A;j z+YU)I_>EluS0DZl&%e#(+&@O{P0MlwkS2UA2L2~a%FjRR1f+@F3-zV{I>wgY%7lZ< zWAJq;-14{o3c~dv2WhSon~046`oN}dTU3CG<`84oz;D*$rr-W+=KkL#|DK!wH_5-3 z;{RL8zxJa4vH={^5TcSd9>v>${P6AN_CUZ;Dpwte3N* z!IpC($+iZnO3G7Fry=Hoh}Nz@?%qLg|M_%V&TKIuDv6lNx35tBCniFT8^Szf=6S|& znA@CP<#S3@S2QKcvZRbm<-TIZd#Gl(%<2%Ss!KZT*JZu6 z+_^Rsf5*xz(kmh-+E?16d*7mUSM2-4TioB{J7~q@NCq+w8nP#GUe81iP+9dFPfe5- zba`Z$=HI?VB)z)UUg~@?rf~U{{`_D;f<%sWK5reDPD=HL>$S!0_+y6txc}?*aXw&Fc_3O^6FYIqAzx z_}-3cmi-_)+)N^!&~E>-=_VZ%P4q&D8|Pmzt>lYQBC(qsdZ0+kb^E$soRywDKGAq^ z*-R?r*S+{X<&r^ks>24uPMH#o;dVEl5KOba{$9Ap zn5Tv!h_2(@@RE*)AAdBQ_AfT7#6DEWY8kSYaNIN}zaBXQ3!jwQNps+kc@ec-{^gB8 zxuYq$nIM+^&B{Srx%S|uo03E8L>_ux@516HzHc#VRz7jo>)em6mT1Fn8Y(89*zt_l z#tTSTT+1cL?}WgYew6v&ODxSPu3EL^{e4&(rmRG2O&tEiWUomjhnab0`8v5faEsgF ztzriq7RkK<=qO$8Wsa%KjFcu}fjz&E<+EQc(JsU-@-!~krm2P&ZEkTrW^BbHugUETOmB)I9GrJT2jj9EHnn=(FHHhougm^qbIcgS-{`otDT z+D2=&NB0aG5PIfIqZ~>5$clDa0-HZ)lxW9OY**eaePSLQ%C-1Y0d2+Pt~rM&)VJUF z?$<40Q%NkW1Wp-|UBFGbX*M!bmV5KtPV%TvsZhVcq5HA1ZRfRWM|;7`YiCzv_r55@ zzJ6!7cfy;`{P*KnxsyLppwtX{Sd78iZ3BM4CviE?Uz=nv5tD+{H=TN$k4a)SL%&S- zKJ0tf1jQ3$H%%)s(z@-hno~9p;-9C)Nv9H%Xn5G{ygTdwB%HEC$&~ZP=5m7@-Zism z=Cs>~dDF7CSYT=h{EmAkJ{-1Ou(N=vP(-=T-RR*~H@i}W|3DvwiRivEku2L~^co$! zae6i@0vL9NIs>Df&T7y7^PPrwAxB~-Fhge8#<9WBM*jz4Fsg9bd_129&=A(&EsEnT z^9Ka8qxY7=QrtU=FiN5q+<4U`;_uHPV=M6<7xPPz1 z-(UGWrPsIbPMw-;#$W($^dTRpNt0RRdid`FCwaW^9JIGU=DH;n--Ke{kOr`5mr%zK zHDRrM>$JBlMus*X*q&Y-R&7UkJ@7m|*+0}+$$6^UWWNHTbSN1ySL|9cHF|MJ;ae)r z&_&^R&l-!;Qs?`nOB1+i3BGXs{K>y>tk2cMY_?T-L*t{w3D;hyx>GBurB(0xR1){d zVkcMX7c@^vZ?$L~g@+NXvrpGHZj|lB5sI5pGl;=if7wEShIX&SwD-*3Qv3?T7T+Sy zP(1}qSGs503J`7`cPmVC>^OHS;YGp_lL`3u&S4%|%0*9d`EZo{F{c7V%(aBwFqe@a zb7e``==E#KpoHV>ULw0d|8v%SijNGRwm0Kjg}Dumo$74Tr!iL-3*oowFZiHs*T9%+ z#k9ppx6wAzik8o|uAL@}kO8pyQM_SR4^Ipw`7v|o)U^sP;Cnpbr{Ppw+3L&Cu{b9Q ztqO%P`RSV2`#K1(@9gbzVQ4qXH?R0v*NTd?4QHHC?A>tQx6?J#j|CBF2}j=EL9V_} zcvgU1Jb)jcQl>7}!n-LzeJXx0zm+nxVZPybGu~?eFP|c8N9dUuoD@dUl3K%%Zpb;S z0v%*f-hLUxn;f>VMShf4)%?^(h+ZaxG4*vM6q8e+#|fI9lg7x#G*8{S037f;VQiEAO;`r&UEsD+BJf`Fx(sNvT&Q;46Tw;E{ed}jjhcLVx zEis1Q_0f!?L!L`xZx5o5W7_r`n#JqD<_+;4=|e%e^VE3UyC|hX;?BSiqc0wA0QO@- zD10fO$a>y+p%%9K6pwA>KRoNX(if1bcApaN3?zNY5oq)U{J9`^JoZ}^-|8@tKwO(4 zXj21~sm0Cev3K8%yy+}qHSNnquk__R;7MczwFvd3Vh3@cqdcs4VoxXbv%~bnwT%}E z6=TwEFRm#k4o*f}A=0}N3<+Vxiiix`a=Eh6n-bB^yW^?B(#<+02|NkwKZq5X8ce;3 z^RO!!=t(p#!m7=^f`TgXasgzW&(_@)iU>FI>o(Pb?~ZT#0Kqg~M|nJI8qpa+gBx00 z$(Zf(YX5sT&*GbCzdV3@W$|nNGBfCW8W=c{hPnN`~vx$-HR>|d7cUH=++%s#} z#U{E?Av}7Dc1t}Dg;F_iEu(DYJzWZG2-e`ljx8SuD|Y)m=7&mh&&KX9#3vGye9Lwh z=0$UnTrO9!&KKWqeKn(4V|S5IQj2G~dhs*z3&G5TPo_w&G0h(JmAYUGo1vCZlLC03 z4w62>+RHLt%>WaLrwgUCImo4%PCeT4f@a=njVss9COrU9d#RR67?u#)zpI%vk8QJk zFqpmZ+8g=tkE;lr{G2K?5lSa6dv#cLZ z-Czw}Y;zvUQ1I%%G^A;3P)!D;Kna^k)4|vc&u``oD-gd; zMWu_bUR*!!k=E2w?fA%kpA;S(I9?=OX46eDG~aH2ono^H{4xaMT{p1pQE=*04L`i; z(CSFWW7HiK7Klo(U3pwCWQwl7GA)hq^dfe9p>@h`M#T-qq0rx_WwB{g$usobdOC`k zqO@>n)X00j9754T$)UE3=IaG-upv>?)n4Vt2OR6Or|U9vG=%v`12eV<^NS+X{^ z;!+7Q#x`P=*ilQBF2hwfYm-ovkJBCPURTUhOZATpQ3SCWe5uqd9`pDD^qRr6{~KI}}d4%JrMHq~b&OAl5 z+P0s~+-yG^=<#GHb+e^g*w@v4Ol)R!GNaRQN7~n1#EDrGKFXrvo%a<6=dYm7n%8dZ zK!G;N(Sk{6(t1T>Fkf?DZ6Lco4XAWbjNs*JAIU& zlS8&EN39b3y^^a~*EK=O>UPrEcRBOz7*BH|(U71uMCpoZQyi3AQro_ zo3#UjR$l#Tm-4V;qxX%#au^z^b)|)J1?5gMIPZqCq^Jd;W#?Ct2il*)L9{R(7?wWi znL}2_^{n!7qxFfyqzxDkD73e2nDfTDA&O*%T}AZC zq0)(Ck6pTo4Usjgh%C~Q$j&9M-5Xu3Gla9Gn?7T#H7C#`mrS`Xbd49=z_yOB6JZLoBLcx`!6)aXZ%d1tVLl->Sgo1%Sv2d)(_gv5E|{ir%EZa z)01l=IE0A(Z=DA2d@MDm^xbQf^;==va!Ffg(&in+hL|)oUu*t&A{*bY-{&#pG4D*& z2uLwcaCD;tx}q{Ro`$)pm(8E&Fh6bMv40dl{Q&lCgM#h-kU*NJ_d0f<3hzd0Z(ehW zU&$$~NJ2ZW@qVnZUYs5$C*T;d1B2@+#E5$2kK*01ljf61yco53Bl4Z4C~nrR`Qu<@ z)7tuVn+g>CDx7%DPmc#ltUMZJW=5clov<4efz7@|WCW3Ib6uKGPX?PO%uj1%mp`OL zvX^5D&|eHR=vV7AYrEjM!`HxQU34fKE=T!XKc{PW?MuvMTO3iFB9)i?h(k5ePnXQv zsVi129DOJ(t~54{$igVwBk=)rr*S)&mmi0@c1JKdubJTa$t}W7c#ZqT1HfA5L+^`g zO8f)Hu%{#P*5+&{^}bJ!U*w(M_;QcW)GK47aFTlca_A0W15BKGE-`W~$n5PyRlLd1xilzNX0;k{E~UJ0fsQ(smBinokPj0xt@M;I?U43To85Zx0k`X{+qFL7!h4v!hUrTy^`nxXHAj9tsdk9w`i@6y z>YGczW`=XX`x(ay+PUjcee!k|JxADMZ^Jj}_^M~XK}LOfqAMJ=3Fag>ttp)1Cvd@oU0lXEt!c6@@Hgxg84H(LwKyuKJ(zG7M%D$(zrevcfmlepd2%Y(jv?Yq&z;$$)#lC9Vsy^I$g;uI?9K>A<&E^R zh;n%|Z1Tq1IWMIaf)Qxuo}o4)u|Cj-93XwJu27paU#ul&a+BX|$71u!3q~$c7bOFP zKL8{9y2}+|5qr59kjwrX*BZQ{tcY(3`q)oZ8MUKB?~$V_?MVb(FVE$*T1wTMeJGZi z5%@+0&>wkaSJYXw9ohaD>@o4S5~Ra96Zmg4K!#7ghrQ>i*EmWBeb10xmIt?!R%PWZ>ZUt|d&nwVdenQ5PRtIK% znW@pZB72wt8HV+ALe@p_#qQpixIP_Th3+bOUXJan(FWz-bPE?b#G%|e>*$L(K9f=d=< zi3%0+m^$jey)v>I+c`#DfqS<^&^l*b`2ei)o%+&W#OUpzgxI-zQ66oBC7|22X4szjx7|I@=eCGTg`OSlR-;_@hRYswxLU}@bB`;Pb?ss$p_LZ zPJcKa`X23KW?I@kwuGmwhNYD=n^b%9EU^=~sPlG(EakK0N9R-3Hn!txY$F=3*2UyDQA1a?;IA!wL{Vn5BypuRM{mJEB|3FlKHfFSS6}N4iLY!Nf72Y*P(O)tPC|5;g)PlcxRc?oB^v%7J zontt3J=ZF77Vq+*Y^d7+L#7U3B{UVw=IHUSv6F@vfr_zEdb}Z>8>Q%bqx?s&HooLI z`_bu$f(}yRQ1%)wP=o2j!vYW6t8&pZ%Lzajn}X+iVN$Th%96jf+IJ<_$We)Woi&4c zO=;;zAQcUB(!|Ts5m6oOOn=X{kr|zi!pI|4SAZeC&Lla|m=_+H{pv8s<#_iZDmyU1 z$-jD(Y(yFpAC9`8Ht$QCke^RRjhgWeU7>_U#JYlx%yuBlLX#kgQ>yre*`pNHW5Iur zw$139WGX4;#}+ z%4ig;I_N!i{`A6{Ub`^73;~;T>U_9p^?t`)ld#qGy27?~4sy~)j89>O2jTRCs*niy z72X#t^X02osF%Ga$%;cOOU@mw!pUNpY6bPyBpx#?APpH)_3Y@RU0R&8#1sI-(kQSxl%0S%Fq5IXEB%LA-sN{U)@;yeJ+1W$lIOJtQo zrh);=lEIylkdhLh?Y-?e+4K6m?BCbF_{h!u``y>?y1v)<`u?up-Mv}fv^EqhXX<~H zw!fE@eMg)6*K<3{JDeBJo_X=PX0f;>6LheNp+?$^-c~-F{FfK20-q6g{WZGs*z4;! z>KR7WgUiDqFK(V{o}ZPgk)gcbcBpM%oEmNV&7Ucl`;}evbJ;$(%$9*3uUqtN#kD)A zqV3){G}rGDt%c=?(@%+(g3uSR3G>X9@dc9f-@maQ4_K6#&PWAOo%Q|4(%?YwU4^SA z&V0T43xG~Mx>zB1XokPJ@De<`pRC)DF@t^6h*_}ZbtD%&0x(~e)-^mlxyH)+gKgZz z(bTpmnxq4PU3eoytP+1(M|UkEF-=I!6QX3AKkT(ONGDW`$oay)%~@403EI?V_FMOB z-kpSfVg1wA*|>(}YN@%1_yZfK#S}N7P91vmiE1HwJ$e!-nA0tlga0LE{{7QNR_IT! zz4rd~FZO(L@Fm3bzJEXV1O;a(SGdM>J)1!r`~h;tusIxdDx)+(*u%$NtHGX zQ}?W}0R5A^Ca-aLeG~EIG{RQ~pp(MO#|7Crzn-6W#i5uKB#pX|&x(?ef3-aH+r31_ zUls&+9%*n(i;8aK1aFeG8{L|-Rk=;Hl^TkOW8)m^nyO3Tub9ge#M;ES0bD+^iA#u5 zWnG&UALy2sl+<2NREVLiu+s7A`$0m#dd}GA0**nvi=^E26pxY|Qv15hhCsN7tnZ;r z2=KmnPj*N#N;>ZNa+@!&%3v)aC;+#MRL7AN)6Ia&pYd2tl0CqR+{L|AAq zX#uJe>QuS<{MJJ1DL*Er&>SpnTk%{F)e&?!@cMX5f^oo4qPZIv!Ja?C&uR)pIi6w< z3MY54uuswxgIjvf=bFQrGR1oa4Yx2giQHq!r$CpLvzDUYduOAW(7UBNbl=NKl_zta zd)lC_-k!J$>vZx^ZnC$*5>!8*m-i$<(*ODC;FZriyj?2Ls6ZWd%*rt3xi=Z(RB8@S z21szv!Vf6IEfuDE!|>z@VbMY+w*VC!HU=IYpNm$9@h`x297Ws4-ic*l_!VfzIMl_X z6Z&wRew$|#rExbi1$=pyYc(^;O z8g|2~sbHW# zvbdVum*0$9YOC$*&PIED)Vr4?9@3G-DG6Kd=9Y*^IW<^#b4}-FRM=RsF0aao>?hiN zH?OnS`6>PeWIGU7DivX$0D46)w#rKOPuiX8%f7@U!*bd_XScf!($T@?GdY{XG`w<| z#k!ZN!ylI{1mFLoi5_osK`-4NUmi%#ZvIC8zJ_kCv$*2An8T`@aWMl3YC2uaZ)LUW zANi+|dW7gCMH^&}8{j2gQ0P*|zJKw9V?O4)wNYX3KMWlIi6_002d@{C;sp<fsYPHxrZH5h4WO@>YopT;>}CMWZ~X#|GLNANdNhNYTnudpUTSTG~H+eqA%^yh7G z;*(h0RcqnI)A*7qfLtD%#VRrpgu0x(v3Aa|Wj6a!GL9mW$r&`;q1+P-l&y^2XfH#0 zlJXIs=dODN3H}%6f_jz6*)=w|C91E8)K5%ILq{w;2*(e*f+4OOqH1VH3tSe!;;jeI zMR-VZyH-Oe07=`s!AsoEnLBpt465VA=<#jGf%B=-bf(o)Os3=DS+iet27zs-&9||D zZfcLL$CtwTajH&`?<+A8+~wrS9R`l#XqXC(gqZ$epXG@C;{U+@g`W67SMIEK5fjv! zkw&#v`vGZe?y#~Np^PA|=*xXqRs;w83Nc^vj37=q5mHhAF#y^F}Kn!7Vwk+MVLK!%@% z+-&$+72smtAF9)lO7K6-(rujK^-p$nY6>S#sL-e%#|u;4ZEiba@p^YI<)vpJQc#?H zm6OQ|F+s}__Q0!|=FmvxdDL0p&f-a;dxF?ROJiZ97F=W0=vK)kwDCY;YE%I(We4=f zUn{DB=Qm}<@)?D0ucazw@KCq;4t`+E{!TocXDQJ-Vx&Ybs-Ql;tA%aLG||Qmx)`pm z72h337D(g=`Ee8-iD~F$GB);$un8z!FyGj7vBus?p6Pz>c+j_>>biB-qljrGr-qt` z8+mSGXqj}?dcaoNYq4Bii!LhodZQY>{W5+W@o?z*g~6n5Df?iccDyC)J{kySVd*Bt z2yfQEKCrC;$%c7A9yGB{AQ(dX_4k8C^U-}IZZQ00D38$P7u#20enzw3OyzoLCw_>r zp{59JMpv4{(W3c6$5UYLK*zh->Np0Gt=vj!n0=JbwLF4}!(r9yi8}@z=Z^+nucSKa zFWzVa(BOh$NCFN-2VN-(@a-YGE7O#p{52Wtaa%!)@kP$x)~7TN87t!A!(Z(VS_Z^o z-+o=buV578?c1x$O80jGKu1gC)NwSKR|kiv`bujDs(<1l)3oWUjpS2^-m=4|RbcH* zFS=&{n3*!Dx~(_3MMk26DTmK2!JXP&ugp+j_iYafz!}= z;0&dT1`zR~q@sRHMZSC1=CNj}CLe_U;#98^bVOF;%Gu1TfM8fh0tgUZvL5N)>6I{x zf9}4vwoXhb&(^q;?DB`})HC|}I)6*z;0TrruJ_4m1!EUq6NypP4#^jK+Qe!2UvX;( z?u1@lOU-u&Dy+55?>_M#c6f25c1^JGDY7rNPctH)gN7PG)C>QV=%O{n0w*I#s3Kb? zKE%*j0yU$RGC6(q)Uft(h5Sq3Y`aKmaXPV(GctO023+pk2+UYkQTt9KJ?P|Vq@G(B zYo5#-lOqdsU=B*bGI3uuPepgj9VtymRJ?LvX!1U6l>J{tr-PgUk9!HAH~suhI=2Ql zWDc*#gETbgqCTt za`DT^3J0>)V4;9$+RX%pdpWjDbhQnGlN?A0-iu{p$<N5o9m{dPjZhVFWd&4MEl7JUfT0U+HsM zHbZykyxCS=VN5FAp^HsdQ88okAZkNwQ|-YsR8DkgFF!Y?371n9lPL$!68U$4sB@VRt!EOR=fIG9y+1E zg%0Q|%Gu~;wXCISa4ThJa}944ACv59ZUcjP(pG0`Vh6KUn?sBN&J&%_1W`=NQO%|1 zJE4LAR&FToN}Nwfp>11;^8Jq}4#KF~m6tx%22mCsd}!G?GYf6SNc2~|issw``$h0s z?&f~8#Jp# zstj_mVF(s_@AS_=I1XB7245Y-=I7JdQ+}RtuXhdJ+4U_%c#t+1DT0ZAn(5Hf^AVKU z&#W=e__(K71s1}_b-#y)9(ZHsRGKg> z6+tDaWWBK2aI_emutkwB^!AkZlF2B~@@yy58e5@O!=TCcHFz9*9py51Fay#rqS?~$ zd0x~_-;I(dOK=Aetc#A;ATLdD){6(8Q0JEZcHQ|+zqj6Q5(M;% zLGp{tFp*Q6k!pF+O7p-SIeGwX+2pM)I%-BKB+|^FTMY&%3+Z-cU@kEs5@(>bgTweWoB@M-2$bjgG_}gsz}D zn8#LbeBg#KwSy4S%>0=y1<>kJO(b&$4hZFqv;LdwrI%fvajB>=F;Fti6UtJP3zR%^ z6-^r)o2IF*Bc#}+Jv-yhvixPy$;DSecEDqTyckX?_n8r-z>VVc0lHX%s}!3+7Q4DK zH+gi<=a=-$QTOYAa5tg5gl8@+(CcFhq`>r^oDZtSaCzM$P5?LCkTba(H>wac%(clngZp6?r|0V)VAT5VdTs ze_yTBQzc|4uHz!aaRM&Y@Mo*jxNM!~K%t0W7O-bD;ikHF*BFZI@kOSMz>i9t-=OQ^ z)2^6J{uVgeZt6bL=s=j_wxFs9LAYGhG@v>ag9hL+hCnW;HpQUA;BoHqD@VsP44KWZ z-%QyT_WJ3OPakibap0osVr|~)KrdUx;DN%(zKG^QezN6}i2$Jp>VXbkZ~=}a%ul?F z%`E4&pvv(}yN3TAF8-#66>j*&O}{xeF}`w<;UJjVX!795bTkXdp@JlU6RqZqG#YOM zraXmmV#_c3&r&Y8r_#mv+m!Zxv>P!?`+Wa4$~r1BND9@8NpOlOUPEVL5^II;u+2d{ z3=T^D9eFy*fgtd&uJ?068_cQb%rSXedW3u;pM42x2ALd1dFgS_KC$Xl=Ew*kCN0e8 z7yY=^xvEkIYBgQ&i$~Lv7Y6o*l5X{q#Th z$D~8!*~RL?b^YQkI_FG$1X>-Fs6l3QO2q!Rtz$Uk*!PwO=i&mU6j1h7>j!%iXHA?; zo|ExgfSVMref(5N=&J71ff0qRc>st09xq5L>Z{{}pqg|=Oj6J)%_ffY@?tPpTcB|y zkFi`3`N6Ivf>5(tc_8#`XpZK>8%d9EjYw^_PMR|MgK^#Lcy4adx{O6!!JOo@hB%q-5UBtg)w`|SKnKIZ~kD> z?Ic-wc1i|PZNgwuA-yT66K=UBFcfn&J6#Xp-1HaIH+^vXH09P;&sl%|Kho3R{cZCv z4tX_1-^Dg)c(c(m(ko;|YL0S_n!xS45*&uqKk*c{=`(FjQg-21@d0;F-eMXNVL{X^ z=at43zO`qX2dmY>k}IWwB?Y1oR2s?fz}>#NuT#4>i?j^?MGRQr(SSu1@S&j9xH=l3 zPz05m!@*oMj>z}%G^c^X8g7MoZ+bcG$mXfd>2F_SA5wAnD7USQ4XkSy{eF9LMaf_J zv3>OWac4~mE+*5Hs)_FM(Y5njofT;udOCI_O`ae_Q$W`4qGxvh@pw3X>C z;s;2yFB2zrVb7l@K>@n}P* zj|dL%d^SnAvnE&xz6Tevr))l>GU3}#-&vkLFNt1ShyzBXe~<{0^`j(d=hbtzNR0O} zWP~Z05A+s(hUyE>kf0^Kx+ zS1;bBQVXM$&rxt3H7~4BKU`xN$I2I84wRunzpo>@@w~@)z3H7i4Dh()4+Q(5QQ6&A zcpn3%{;T5z@D_)EC4N@JYd(GXS){pVk z4T&4l?Q!BG4_D;)e7nAst~lf1u3r(&tSdly%}wk2cBy`zH<6xeUg`7+WtF~=m}?R z!Mp%a9eIQiJ!P~<^V6HB=yf64DhSL{A=F$83R9PTE9Hepp|ZnaWqNe+zeY+i8}eAC0W(_2h2hn0Up zWJnqKr3bD4`P{GA;%xf|+xKFLBNaRg4|XjQkI41np{hf*)3>(yQL_z@bVas8SN!n9 zW2K4g8}?5>mK{5bIB$fsV_+CufZATL#Eurfh_kVa=9Qr z6W7pyHMS1Dwd4t3O+^3tBF4!zcTK0BoHWyWHRglKTe+#DrRX1Td;_2Ke|A{z-dguKlu-zx)ayAa-WXkljLyA?46RaT2>LUSXJY59%x7mQ*#HaLT4%m&_~t8 z#~lBL|8S3gN(?vYZ*Ch*$@%)II=#X$pLdNUT_>m1g(_G4HAYY^)Z29B_r;vBRMhVP zpTxDUVQctCPm&2Y*uavS*Aw9Di=>)1M#B^6RqlqaH4lG!cw*JV521VP!0}ma#E}3e zR(l%%6|M>q{18+S*eYwn$&{E{$r zZ$^bCnjYF8miF1%FAu{}Wq{|k9D?^Asn$ljCr8Zqdakq!i?J*E?)+pWW5LV`!BEz~zo*Lp_y8!k_WU^yf(>cG??8&%S z*6_R6&Rc%?#QsApk4tu) { return ( @@ -68,7 +70,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { } }, }, - useFilters, useFlexLayout, useSortBy, + useFilters, useFlexLayout, useSortBy, ); const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; @@ -136,7 +138,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows }} {...row.getRowProps()} > {row.cells.map(cell => ( - From 72579af7914b2e328ceb078f88ea2e76396151ba Mon Sep 17 00:00:00 2001 From: benne238 Date: Sun, 31 Jan 2021 18:11:53 -0500 Subject: [PATCH 067/129] Revert "Squashed commit of the following:" This reverts commit 7535510380007fd7bd455269a2a37e2cda6f4822. --- README.md | 2 +- api/ECNQueue.py | 8 +--- api/requirements.txt | 36 +++++++++++------- .../UI-Snapshot 2020-12-03 at 8.10.32 PM.png | Bin 255424 -> 0 bytes src/components/ItemTable/ItemTable.js | 8 ++-- 5 files changed, 27 insertions(+), 27 deletions(-) delete mode 100644 docs/UI Snapshots/UI-Snapshot 2020-12-03 at 8.10.32 PM.png diff --git a/README.md b/README.md index 0b31b4f..36e6329 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # webqueue2 A re-write of Purdue ECN's webqueue -![UI Snapshot](./docs/UI%20Snapshots/UI-Snapshot%202020-12-03%20at%208.10.32%20PM.png) +![UI Snapshot](./docs/UI%20Snapshots/UI-Snapshot%202020-09-22%20at%201.48.58%20PM.png) ## Stay Up To Date See what's being worked on with [the webqueue2 Project](https://github.itap.purdue.edu/ECN/webqueue2/projects/). diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 8eb109c..df564fe 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -263,12 +263,6 @@ def __parseSections(self) -> list: for assignment in assignementLsit: sections.append(assignment) - # Checks for empty content within an item and returns and - if contentEnd <= contentStart: - blankInitialMessage = self.__initialMessageParsing([""]) - sections.append(blankInitialMessage) - return sections - # Checks for Directory Identifiers if self.__rawItem[contentStart] == "\n" and self.__rawItem[contentStart + 1].startswith("\t"): @@ -1355,4 +1349,4 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues \ No newline at end of file + return queues diff --git a/api/requirements.txt b/api/requirements.txt index d87bdac..1aaa908 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,14 +1,22 @@ -# See: https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file - -# General Utilities -gunicorn -pipdeptree -pylint - -# API -python-dotenv -Flask-RESTful -python-dateutil -Flask-JWT-Extended -# Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it -PyJWT == 1.* \ No newline at end of file +aniso8601==8.0.0 +astroid==2.4.2 +click==7.1.2 +Flask==1.1.2 +Flask-RESTful==0.3.8 +Flask-JWT-Extended==3.24.1 +gunicorn==20.0.4 +isort==4.3.21 +itsdangerous==1.1.0 +Jinja2==2.11.2 +lazy-object-proxy==1.4.3 +MarkupSafe==1.1.1 +mccabe==0.6.1 +pylint==2.5.3 +python-dateutil==2.8.1 +python-dotenv==0.15.0 +pytz==2020.1 +six==1.15.0 +toml==0.10.1 +typed-ast==1.4.1 +Werkzeug==1.0.1 +wrapt==1.12.1 diff --git a/docs/UI Snapshots/UI-Snapshot 2020-12-03 at 8.10.32 PM.png b/docs/UI Snapshots/UI-Snapshot 2020-12-03 at 8.10.32 PM.png deleted file mode 100644 index aa66e5d0abe752b9a3fd1326e322c91320e572e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255424 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�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

qkG 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Ð%bt^(+Sbp^yU5K-9EaMKsB35g6`wXx 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 { return ( @@ -70,7 +68,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { } }, }, - useFilters, useFlexLayout, useSortBy, + useFilters, useFlexLayout, useSortBy, ); const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; @@ -138,7 +136,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows }} {...row.getRowProps()} > {row.cells.map(cell => ( - From 73a930c9baf80d01e876e6c5ad5abc3bb78e4a7d Mon Sep 17 00:00:00 2001 From: benne238 Date: Sun, 31 Jan 2021 19:10:12 -0500 Subject: [PATCH 068/129] bugfix for item.__getUserAlias() function --- api/ECNQueue.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 8eb109c..77c688e 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -51,6 +51,7 @@ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") +queueDirectory = "/home/pier/e/queue/Mail" # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -1200,7 +1201,18 @@ def __getUserAlias(self) -> str: Returns: str: User's Career Account alias if present or empty string """ - emailUser, emailDomain = self.userEmail.split("@") + + # Returns an error parse if the useremail isn't valid + try: + emailUser, emailDomain = self.userEmail.split("@") + + except: + # Parses through the self.headers list to find the "From" header and its line number + for lineNum, header in enumerate(self.headers): + if header["type"] == "From": + headerString = header["type"] + ": " + header["content"] + return self.__errorParsing(headerString, lineNum + 1, "Expected valid email Address") + return emailUser if emailDomain.endswith("purdue.edu") else "" def __getFormattedDate(self, date: str) -> str: @@ -1355,4 +1367,8 @@ def loadQueues() -> list: for queue in getValidQueues(): queues.append(Queue(queue)) - return queues \ No newline at end of file + return queues + +if __name__ == "__main__": + item = Item("me", 105) + print() \ No newline at end of file From cb7a5fda7b9cc9b023bf2b8f259d468567da2d5e Mon Sep 17 00:00:00 2001 From: benne238 Date: Sun, 31 Jan 2021 19:11:01 -0500 Subject: [PATCH 069/129] removal of debugging lines from previous commit --- api/ECNQueue.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 77c688e..668299c 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -51,7 +51,6 @@ currentFileDirectory = os.path.dirname(currentFilePath) currentFileDirectoryParent = os.path.dirname(currentFileDirectory) queueDirectory = os.path.join(currentFileDirectoryParent, "q-snapshot") -queueDirectory = "/home/pier/e/queue/Mail" # Queues to not load in getQueues() queuesToIgnore = ["archives", "drafts", "inbox", "coral"] @@ -1368,7 +1367,3 @@ def loadQueues() -> list: queues.append(Queue(queue)) return queues - -if __name__ == "__main__": - item = Item("me", 105) - print() \ No newline at end of file From e33eec054a4f4b619e75aff49dc67bc013dd41e0 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 1 Feb 2021 00:26:08 -0500 Subject: [PATCH 070/129] Add pyldap build process to venv-manager --- utils/venv-manager.py | 277 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 274 insertions(+), 3 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 6209901..d6ddd53 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -12,7 +12,8 @@ """ from pathlib import Path -import os, logging, argparse, subprocess +import os, logging, argparse, subprocess, urllib.request, json, configparser +from urllib.error import HTTPError, URLError from typing import Union @@ -27,6 +28,11 @@ VENV_DIR = Path(API_DIR, VENV_NAME) +# Set virtual evironment resource paths +VENV_INTERPRETER = Path(VENV_DIR, "bin", "python3") +VENV_REQUIREMENTS_FILE = Path(API_DIR, "requirements.txt") + + # Set minimum pip major version TARGET_PIP_VERSION = 19 @@ -130,6 +136,228 @@ def run_logged_subprocess(command: Union[str, list], timeout: int = 60, shell: b finally: logger.debug(f"Exiting subprocess for '{command}'") return (logged_shell_process.returncode, process_output_stream) + + +def install_custom_pyldap(venv_interpreter: str) -> int: + """Builds python-ldap without SASL support from GitHub source. + + The version of python-ldap to be used is determined in the following order: + - Version from requirements.txt (can be beta) + - Latest non-beta version from GitHub + + Exit Codes: + 0 = Success + 1 = Virtual environment interpreter does not exist + 5 = Could not complete GitHub API call + 10 = Could not download python-ldap source + 15 = Could not extract python-ldap source + 20 = Could not open pyldap build config file + 25 = pyldap build configuration file improperly formatted + 30 = Could not write pyldap build config file + 35 = Could not build pyldap + 40 = Could not install pyldap + + Args: + venv_interpreter (str): The absolute path to the python interpreter executable for the virtual environment. + + Returns: + int: Exit code. + """ + + logger.info("Starting pyldap build process") + + # Check for valid venv interpreter + logger.debug(f"Checking for valid venv interpreter at {venv_interpreter}") + if not os.path.exists(Path(venv_interpreter)): + logger.error(f"The interpreter for virtual environment {VENV_NAME} does not exist at {venv_interpreter}. Exiting.") + return 1 + logger.debug(f"venv interpreter is valid") + + # Get list of release tags for pyldap from GitHub API + logger.debug(f"Getting pyldap tags from GitHub") + pyldap_github_tags_url = "https://api.github.com/repos/python-ldap/python-ldap/tags" + try: + with urllib.request.urlopen(pyldap_github_tags_url) as request: + pyldap_tags = json.loads(request.read().decode("utf-8")) + except HTTPError as e: + logger.error(f"Could not connect to {pyldap_github_tags_url}. Got response {e.code} {e.msg}. Exiting") + return 5 + except URLError as e: + logger.error(f"Could not connect to {pyldap_github_tags_url}. {e.reason}. Exiting") + return 5 + logger.debug(f"Got {len(pyldap_tags)} pyldap tags from GitHub") + + # Build dictionary of available pyldap releases and their source code archive urls + # Example: + # { "name": "python-ldap-3.3.1", "zipball_url": "http://github.com/download" } becomes + # { "3.3.1": "http://github.com/download" } + logger.debug("Building list of pyldap versions.") + pyldap_versions = {} + for tag in pyldap_tags: + tag_version = tag["name"].split("-")[-1] + zipball_url = f"https://github.com/python-ldap/python-ldap/archive/python-ldap-{tag_version}.zip" + pyldap_versions[tag_version] = zipball_url + logger.debug("Built list of pyldap versions.") + + # Check requirements file for pyldap version + pyldap_version_from_requirements = "" + logger.info(f"Checking for pyldap version in requirements file {VENV_REQUIREMENTS_FILE}") + try: + with open(VENV_REQUIREMENTS_FILE) as requirements_file: + for line in requirements_file: + if line.startswith("pyldap"): + pyldap_version_from_requirements = line.split(" ")[-1].strip("\n") + logger.debug(f"Found pyldap version {pyldap_version_from_requirements} in requirements file") + break + except Exception as e: + logger.warning(f"Could not read requirements file {VENV_REQUIREMENTS_FILE}. {e.strerror}. Defaulting to latest non-beta release on GitHub.") + pass + + # Set pyldap version to value from requirements file if valid and available + if pyldap_version_from_requirements and pyldap_version_from_requirements in pyldap_versions.keys(): + logger.debug(f"pyldap version {pyldap_version_from_requirements} is available from GitHub") + pyldap_version = pyldap_version_from_requirements + logger.info(f"Set pyldap version to {pyldap_version}") + # Set to latest non-beta version + else: + logger.warning(f"pyldap version not found in requirements file. Defaulting to latest non-beta release on GitHub") + for version in pyldap_versions.keys(): + is_beta_version = "b" in version + if (not is_beta_version): + pyldap_version = version + break + logger.info(f"Set pyldap version to {pyldap_version}") + + # Download pyldap soure code + logger.info(f"Downloading pyldap {pyldap_version} source from {pyldap_versions[pyldap_version]}") + + tmp_dir = "/tmp" + download_file_name = f"python-ldap-{pyldap_version}.zip" + download_file_path = Path(tmp_dir, download_file_name) + + download_pyldap_returncode, _ = run_logged_subprocess(f"wget -q -O {download_file_path} {pyldap_versions[pyldap_version]}") + if download_pyldap_returncode == 0: + logger.debug(f"pyldap source downloaded to {download_file_path}") + else: + logger.error(f"Could not download pyldap source. Exiting.") + return 10 + + # Extract source code + logger.info("Extracing pyldap source") + + # The archive from GitHub has a root folder formatted 'user-repo-version'. + # Because the pyldap source is user 'python-ldap' and repo 'python-ldap' + # the build folder MUST be the following format: + BUILD_DIR_NAME = f"python-ldap-python-ldap-{pyldap_version}" + BUILD_DIR_PATH = Path(tmp_dir, BUILD_DIR_NAME) + + extract_source_returncode, _ = run_logged_subprocess(f"unzip -q -o -d {tmp_dir} {download_file_path}") + if extract_source_returncode == 0: + logger.debug(f"pyldap source extracted to {BUILD_DIR_PATH}") + else: + logger.error(f"Could not extract pyldap source. Exiting") + return 15 + + # Start the build process + logger.info(f"Building pyldap {pyldap_version}") + + # Read the pyldap build config file + pyldap_config_file_name = "setup.cfg" + pyldap_config_file_path = Path(BUILD_DIR_PATH, pyldap_config_file_name) + + logger.debug(f"Reading pyldap build config file {pyldap_config_file_path}") + pyldap_config = configparser.ConfigParser() + try: + with open(pyldap_config_file_path) as pyldap_config_file: + pyldap_config.read_file(pyldap_config_file) + logger.debug("Read pyldap build config file") + except Exception as e: + logger.error(f"Could not read pyldap build config file {pyldap_config_file_path}. {e.strerror}. Exiting") + return 20 + + # Check for SASL requirement in pyldap build config file + logger.debug("Checking for '_ldap' section") + if not pyldap_config.has_section("_ldap"): + logger.error("Can't find '_ldap' section in pyldap build config file. Unable to build pyldap. Exiting") + return 25 + else: + logger.debug("'_ldap' section found") + + logger.debug("Checking for 'defines' option") + if not pyldap_config.has_option("_ldap", "defines"): + logging.error("Can't find 'defines' option in pyldap build config file. Unable to build pyldap. Exiting") + else: + logger.debug("'defines' option found") + + # Remove SASL requirement if present + logger.debug("Removing SASL requirement") + + defines_options = pyldap_config['_ldap']['defines'].split(' ') + build_config_updated = False + try: + defines_options.remove('HAVE_SASL') + pyldap_config['_ldap']['defines'] = " ".join(defines_options) + logger.debug("SASL requirement removed") + build_config_updated = True + except ValueError as e: + logger.warning("SASL requirement not found in pyldap build config file. Build config file will not be modified") + pass + + # Write new build config + logger.debug("Writing new pyldap build config") + + if build_config_updated: + try: + with open(pyldap_config_file_path, 'w') as pyldap_config_file: + pyldap_config.write(pyldap_config_file) + logger.debug("Wrote new pyldap build config") + except Exception as e: + logger.error(f"Could not write pyldap build config file {pyldap_config_file_path}. {e.strerror}. Exiting") + return 30 + + # Build pyldap + logger.debug(f"Building pyldap {pyldap_version}") + build_pyldap_returncode, _ = run_logged_subprocess(f"cd {BUILD_DIR_PATH} && {VENV_DIR}/bin/python3 setup.py build") + if build_pyldap_returncode == 0: + logger.info(f"Built pyldap {pyldap_version}") + else: + logger.error(f"Could not build pyldap. Exiting.") + return 35 + + # Install pyldap + logger.debug(f"Installing pyldap {pyldap_version}") + install_pyldap_returncode, _ = run_logged_subprocess(f"cd {BUILD_DIR_PATH} && {VENV_DIR}/bin/python3 setup.py install") + if install_pyldap_returncode == 0: + logger.info(f"Installed pyldap {pyldap_version} in virtual environment {VENV_NAME} at {VENV_DIR}") + else: + logger.error(f"Could not install pyldap. Exiting.") + return 40 + + return 0 + + +def is_valid_requirement(line: str) -> bool: + """Determines if line is a valid requirement + + Args: + line (str): Line to check. + + Returns: + bool: True if line is valid requirement. False if line is not valid requirement. + """ + # Line is blank + if line == "\n" or line == "": + return False + + # Line is comment + if line.startswith("#"): + return False + + # Line is for pyldap + if line.startswith("pyldap"): + return False + + return True def create_environment() -> int: @@ -139,6 +367,8 @@ def create_environment() -> int: 0 = Success 5 = VENV_DIR already exists 10 = Could not create VENV_DIR + 11 = Could not install pyldap + 12 = Could not read requirements file 15 = Could not install requirements Returns: @@ -172,6 +402,7 @@ def create_environment() -> int: pip_version_full = check_pip_output.split()[1] logger.debug(f"pip version is {pip_version_full}") + # Update pip pip_version_major = pip_version_full.split(".")[0] if int(pip_version_major) < 19: logger.info(f"pip verion is {pip_version_major}.x (pip >= {TARGET_PIP_VERSION}.x needed.) Upgrading pip") @@ -181,10 +412,50 @@ def create_environment() -> int: logger.info(update_pip_output.split("\n")[-2]) else: logger.warning("Failed to update pip. Virtual environment dependencies may not install") - + # Install requirements logger.info("Installing requirements") - install_requirements_returncode, _ = run_logged_subprocess(f"{VENV_DIR}/bin/pip install -r {API_DIR}/requirements.txt") + + # Install python-ldap + install_pyldap_returncode = install_custom_pyldap(VENV_INTERPRETER) + if install_pyldap_returncode != 0: + logger.error("Could not install pyldap. Exiting.") + return 11 + + # Install the rest of the requirements from the requirements file + logger.debug(f"Checking for venv requirements file {VENV_REQUIREMENTS_FILE}") + if not os.path.exists(VENV_REQUIREMENTS_FILE): + logger.warning(f"Could not find requirements file {VENV_REQUIREMENTS_FILE}. No requirements will be installed.") + return 0 + logger.debug("Found requirements file") + + # Get raw requirements from requirements file + logger.debug("Reading raw requirements from requirements file") + try: + with open(VENV_REQUIREMENTS_FILE) as requirements_file: + raw_requirements = requirements_file.readlines() + except Exception as e: + logger.warning(f"Could not read requirements file {VENV_REQUIREMENTS_FILE}. {e.strerror}. Exiting.") + return 12 + logger.debug("Read raw requirements from requirements file") + + # Filter and clean requirements + logger.debug("Validating requirements") + valid_requirements = [] + for requirement in raw_requirements: + if is_valid_requirement(requirement): + valid_requirements.append(requirement.strip()) + logger.debug("Validated requirements") + + # Generate requirements string + logger.debug("Generating requirements string") + requirements_string = "" + for requirement in valid_requirements: + requirements_string += f"'{requirement}' " + logger.debug(f"Generated requirements string {requirements_string}") + + # Install requirements + install_requirements_returncode, _ = run_logged_subprocess(f"{VENV_DIR}/bin/pip install {requirements_string}") if install_requirements_returncode == 0: logger.info("Successfully installed requirements") return 0 From 469d4bd8adabd0533b28645a4f050e42d069da22 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 1 Feb 2021 00:26:26 -0500 Subject: [PATCH 071/129] Update requirements.txt to include pyldap and update comments --- api/requirements.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api/requirements.txt b/api/requirements.txt index e6bfde6..f7f9b7a 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,3 +1,4 @@ +# The Python virtual environment should be managed via the venv-manager utility, not directly by pip. # See: https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file # General Utilities @@ -10,6 +11,10 @@ python-dotenv Flask-RESTful python-dateutil Flask-JWT-Extended -# Prevent upgrade to 2.x until Flask-JWT-Extended is updated to support it +# Flask-JWT-Extended doesn't support PyJWT 2.x as of 3.25.0 +# Prevent upgrade to PyJWT 2.x until Flask-JWT-Extended is updated to support it. +# Check: https://github.com/vimalloc/flask-jwt-extended/tags PyJWT == 1.* +# Specify pyldap version for custom build. This is not installed by pip. +pyldap == 3.3.1 easyad \ No newline at end of file From 86b3395b7b1f127d155f9d9da4896de04699bbf0 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Mon, 1 Feb 2021 10:21:31 -0500 Subject: [PATCH 072/129] Minor formatting changes --- src/components/ItemTable/ItemTable.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 22250e1..9fad0f0 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -9,9 +9,9 @@ import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data, rowCanBeSelected }) { - const [selectedRow, setSelectedRow] = useState({ queue: null, number: null}); + const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); - const theme = useTheme(); + const theme = useTheme(); const useStyles = makeStyles({ // Fully visible for active icons activeSortIcon: { @@ -22,10 +22,10 @@ export default function ItemTable({ data, rowCanBeSelected }) { opacity: 0.2, }, hoverBackgroundColor: { - "&.MuiTableRow-root.MuiTableRow-hover:hover":{ + "&.MuiTableRow-root.MuiTableRow-hover:hover": { backgroundColor: theme.palette.primary[200], - - }, + + }, }, rowSelected: { backgroundColor: theme.palette.type === 'light' ? theme.palette.primary[100] : theme.palette.primary[600], @@ -140,11 +140,11 @@ export default function ItemTable({ data, rowCanBeSelected }) { // This functionality should be achieved by using the selected prop and // overriding the selected class but this applied the secondary color at 0.08% opacity. // Overridding the root class is a workaround. - classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows , hover: classes.hoverBackgroundColor}} + classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, hover: classes.hoverBackgroundColor }} {...row.getRowProps()} > {row.cells.map(cell => ( - From 55df82b8785e111355ceed60c15c4901caf3cde3 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Mon, 1 Feb 2021 10:39:58 -0500 Subject: [PATCH 073/129] Added queue as one of the default sort props --- src/components/ItemTable/ItemTable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 2ec28c7..5ed75e7 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -71,6 +71,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { }, initialState: { sortBy: [ + { id: "queue" }, { id: 'number' }, { id: 'lastUpdated' }, ], From 98843efd6459347fec119f271885bc7274c59203 Mon Sep 17 00:00:00 2001 From: benne238 Date: Mon, 1 Feb 2021 14:30:27 -0500 Subject: [PATCH 074/129] explicit error handling for spliting and invalid email address --- api/ECNQueue.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 668299c..cb5cd41 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1201,11 +1201,12 @@ def __getUserAlias(self) -> str: str: User's Career Account alias if present or empty string """ - # Returns an error parse if the useremail isn't valid + try: emailUser, emailDomain = self.userEmail.split("@") - except: + # Returns an error parse if the self.useremail doesn't contain exactally one "@" symbol + except ValueError: # Parses through the self.headers list to find the "From" header and its line number for lineNum, header in enumerate(self.headers): if header["type"] == "From": From 9b8c0109fbbe1cb8686803aac27517e284d7730d Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Mon, 1 Feb 2021 14:40:40 -0500 Subject: [PATCH 075/129] Implemented InvertedSort prop for LastUpdated and DateRecieved columns --- src/components/ItemTable/ItemTable.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 5ed75e7..c4fd422 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -47,10 +47,10 @@ export default function ItemTable({ data, rowCanBeSelected }) { { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, { Header: 'Priority', accessor: 'priority' }, - { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, + { Header: 'Last Updated', accessor: 'lastUpdated', sortInverted: true, Cell: ({ value }) => }, { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, - { Header: 'Date Received', accessor: 'dateReceived', Cell: ({ value }) => }, + { Header: 'Date Received', accessor: 'dateReceived', sortInverted: true, Cell: ({ value }) => }, ], []); const tableInstance = useTable( From 75b2ff3eab999a26847f110e500b0a045598ed8f Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 1 Feb 2021 17:20:55 -0500 Subject: [PATCH 076/129] Update venv-manager to allow 60 second for requirement installation (cherry picked from commit 49106215a8a85a19acc4b3fc4fa11d264c22b1c5) --- utils/venv-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 72ecd3b..3bb15ce 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -79,7 +79,7 @@ def get_args() -> argparse.Namespace: return parser.parse_args() -def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: bool = True) -> tuple: +def run_logged_subprocess(command: Union[str, list], timeout: int = 60, shell: bool = True) -> tuple: """Executes a shell command using subprocess with logging. stderr is redirected to stdout and stdout is pipped to logger. @@ -96,7 +96,7 @@ def run_logged_subprocess(command: Union[str, list], timeout: int = 10, shell: b Args: command (Union): The command to run. If shell=False, pass a list with the first item being the command and the subsequent items being arguments. If shell=True, pass a string as you would type it into a shell. - timeout (int): The number of seconds to wait for a program before killing it + timeout (int): The number of seconds to wait for a program before killing it. Defaults to 60. Returns: tuple: With the first value being the return code and second being the combined stdout+stderr From e6c487701978586699e2f50ed1360cc765c66d52 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 1 Feb 2021 18:00:13 -0500 Subject: [PATCH 077/129] Formatting, reorder imports, remove unused styles, simplify hover rule --- src/components/ItemTable/ItemTable.js | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 9fad0f0..081e344 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -2,10 +2,10 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; +import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" -import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; export default function ItemTable({ data, rowCanBeSelected }) { @@ -13,18 +13,11 @@ export default function ItemTable({ data, rowCanBeSelected }) { const theme = useTheme(); const useStyles = makeStyles({ - // Fully visible for active icons - activeSortIcon: { - opacity: 1, - }, - // Half visible for inactive icons - inactiveSortIcon: { - opacity: 0.2, - }, hoverBackgroundColor: { - "&.MuiTableRow-root.MuiTableRow-hover:hover": { - backgroundColor: theme.palette.primary[200], - + "&:hover": { + // The !important is placed here to enforce CSS specificity. + // See: https://material-ui.com/styles/advanced/#css-injection-order + backgroundColor: `${theme.palette.primary[200]} !important`, }, }, rowSelected: { @@ -79,7 +72,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; return ( - +

{headerGroups.map(headerGroup => ( @@ -140,7 +133,10 @@ export default function ItemTable({ data, rowCanBeSelected }) { // This functionality should be achieved by using the selected prop and // overriding the selected class but this applied the secondary color at 0.08% opacity. // Overridding the root class is a workaround. - classes={{ root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, hover: classes.hoverBackgroundColor }} + classes={{ + root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, + hover: classes.hoverBackgroundColor + }} {...row.getRowProps()} > {row.cells.map(cell => ( From 3edc67aed5f5c4fdcaec21edfe4a1971b6bc5f2c Mon Sep 17 00:00:00 2001 From: "Campbell, Justin" Date: Tue, 2 Feb 2021 12:29:26 -0500 Subject: [PATCH 078/129] Minor formatting --- src/components/ItemTable/ItemTable.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 4160b41..87723d4 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -71,7 +71,12 @@ export default function ItemTable({ data, rowCanBeSelected }) { return ( -
+
{headerGroups.map(headerGroup => ( @@ -123,7 +128,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { {...row.getRowProps()} > {row.cells.map(cell => ( {cell.render("Cell")} From 9cb49bf271a6674f87a2d65963cd477ca4618758 Mon Sep 17 00:00:00 2001 From: benne238 Date: Tue, 2 Feb 2021 15:28:02 -0500 Subject: [PATCH 079/129] update api according to git issue 170: consolidate API endpoints under one path --- api/api.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/api.py b/api/api.py index 0cbd771..5f72aa9 100644 --- a/api/api.py +++ b/api/api.py @@ -186,10 +186,10 @@ def get(self) -> tuple: -api.add_resource(Login, "/login") -api.add_resource(RefreshAccessToken, "/tokens/refresh") -api.add_resource(Item, "/api//") -api.add_resource(Queue, "/api/") +api.add_resource(Login, "/api/login") +api.add_resource(RefreshAccessToken, "/api/tokens/refresh") +api.add_resource(Item, "/api/data//") +api.add_resource(Queue, "/api/data/") api.add_resource(QueueList, "/api/get_queues") if __name__ == "__main__": From c02fae399432795881c846e8ed3b00db4e98a0d3 Mon Sep 17 00:00:00 2001 From: benne238 Date: Tue, 2 Feb 2021 16:02:28 -0500 Subject: [PATCH 080/129] updated /api/get_queues endpoint to /api/data/get_queues --- api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/api.py b/api/api.py index 5f72aa9..5a52767 100644 --- a/api/api.py +++ b/api/api.py @@ -190,7 +190,7 @@ def get(self) -> tuple: api.add_resource(RefreshAccessToken, "/api/tokens/refresh") api.add_resource(Item, "/api/data//") api.add_resource(Queue, "/api/data/") -api.add_resource(QueueList, "/api/get_queues") +api.add_resource(QueueList, "/api/data/get_queues") if __name__ == "__main__": app.run() \ No newline at end of file From b91f0d9fdf5403eb5679c6588d16b911213e274c Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 2 Feb 2021 19:02:01 -0500 Subject: [PATCH 081/129] Add global exit codes with docs --- utils/venv-manager.py | 215 ++++++++++++++++++++---------------------- 1 file changed, 102 insertions(+), 113 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index d6ddd53..051f7eb 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -9,6 +9,23 @@ Reset a virtual environment: $ venv-manager.py reset + +Exit Codes: + 0 = Success + 5 = Failed to make directory VENV_DIR. It already exists. + 10 = Failed to make VENV_DIR. Incorrect permissions. + 15 = Failed to create virtual environment. See LOG FILE. + 20 = Failed read requirements file VENV_REQUIREMENTS_FILE. + 25 = Failed to install requirements. See LOG FILE. + 30 = VENV_INTERPRETER does not exist. + 35 = Failed to get pyldap release info from GitHub. + 40 = Failed to download pyldap source. See LOG FILE. + 45 = Failed to extract pyldap source. See LOG FILE. + 50 = Failed to read pyldap build config file. + 55 = Failed to write pyldap build config file. + 60 = Failed to build pyldap VERSION. See LOG FILE. + 65 = Failed to install pyldap VERSION. See LOG FILE. + 70 = Failed to delete VENV_DIR """ from pathlib import Path @@ -145,32 +162,19 @@ def install_custom_pyldap(venv_interpreter: str) -> int: - Version from requirements.txt (can be beta) - Latest non-beta version from GitHub - Exit Codes: - 0 = Success - 1 = Virtual environment interpreter does not exist - 5 = Could not complete GitHub API call - 10 = Could not download python-ldap source - 15 = Could not extract python-ldap source - 20 = Could not open pyldap build config file - 25 = pyldap build configuration file improperly formatted - 30 = Could not write pyldap build config file - 35 = Could not build pyldap - 40 = Could not install pyldap - Args: venv_interpreter (str): The absolute path to the python interpreter executable for the virtual environment. Returns: int: Exit code. """ - logger.info("Starting pyldap build process") # Check for valid venv interpreter logger.debug(f"Checking for valid venv interpreter at {venv_interpreter}") if not os.path.exists(Path(venv_interpreter)): - logger.error(f"The interpreter for virtual environment {VENV_NAME} does not exist at {venv_interpreter}. Exiting.") - return 1 + logger.error(f"venv interpreter does not exist. Exiting") + exit(30) logger.debug(f"venv interpreter is valid") # Get list of release tags for pyldap from GitHub API @@ -180,11 +184,11 @@ def install_custom_pyldap(venv_interpreter: str) -> int: with urllib.request.urlopen(pyldap_github_tags_url) as request: pyldap_tags = json.loads(request.read().decode("utf-8")) except HTTPError as e: - logger.error(f"Could not connect to {pyldap_github_tags_url}. Got response {e.code} {e.msg}. Exiting") - return 5 + logger.error(f"Failed to connect to {pyldap_github_tags_url}. Got response {e.code} {e.msg}. Exiting") + exit(35) except URLError as e: logger.error(f"Could not connect to {pyldap_github_tags_url}. {e.reason}. Exiting") - return 5 + exit(35) logger.debug(f"Got {len(pyldap_tags)} pyldap tags from GitHub") # Build dictionary of available pyldap releases and their source code archive urls @@ -197,11 +201,11 @@ def install_custom_pyldap(venv_interpreter: str) -> int: tag_version = tag["name"].split("-")[-1] zipball_url = f"https://github.com/python-ldap/python-ldap/archive/python-ldap-{tag_version}.zip" pyldap_versions[tag_version] = zipball_url - logger.debug("Built list of pyldap versions.") + logger.debug(f"Built list of {len(pyldap_versions)} pyldap versions.") # Check requirements file for pyldap version pyldap_version_from_requirements = "" - logger.info(f"Checking for pyldap version in requirements file {VENV_REQUIREMENTS_FILE}") + logger.debug(f"Checking for pyldap version in requirements file {VENV_REQUIREMENTS_FILE}") try: with open(VENV_REQUIREMENTS_FILE) as requirements_file: for line in requirements_file: @@ -217,7 +221,7 @@ def install_custom_pyldap(venv_interpreter: str) -> int: if pyldap_version_from_requirements and pyldap_version_from_requirements in pyldap_versions.keys(): logger.debug(f"pyldap version {pyldap_version_from_requirements} is available from GitHub") pyldap_version = pyldap_version_from_requirements - logger.info(f"Set pyldap version to {pyldap_version}") + logger.info(f"Set pyldap version to {pyldap_version} (from requirements file)") # Set to latest non-beta version else: logger.warning(f"pyldap version not found in requirements file. Defaulting to latest non-beta release on GitHub") @@ -226,7 +230,7 @@ def install_custom_pyldap(venv_interpreter: str) -> int: if (not is_beta_version): pyldap_version = version break - logger.info(f"Set pyldap version to {pyldap_version}") + logger.info(f"Set pyldap version to {pyldap_version} (from GitHub releases)") # Download pyldap soure code logger.info(f"Downloading pyldap {pyldap_version} source from {pyldap_versions[pyldap_version]}") @@ -237,13 +241,12 @@ def install_custom_pyldap(venv_interpreter: str) -> int: download_pyldap_returncode, _ = run_logged_subprocess(f"wget -q -O {download_file_path} {pyldap_versions[pyldap_version]}") if download_pyldap_returncode == 0: - logger.debug(f"pyldap source downloaded to {download_file_path}") + logger.debug(f"Downloaded pyldap {pyldap_version} source to {download_file_path}") else: - logger.error(f"Could not download pyldap source. Exiting.") - return 10 + logger.error(f"Failed to download pyldap source. See {log_file_path}. Exiting") + exit(40) # Extract source code - logger.info("Extracing pyldap source") # The archive from GitHub has a root folder formatted 'user-repo-version'. # Because the pyldap source is user 'python-ldap' and repo 'python-ldap' @@ -251,12 +254,13 @@ def install_custom_pyldap(venv_interpreter: str) -> int: BUILD_DIR_NAME = f"python-ldap-python-ldap-{pyldap_version}" BUILD_DIR_PATH = Path(tmp_dir, BUILD_DIR_NAME) + logger.info(f"Extracing pyldap {pyldap_version} source to {BUILD_DIR_PATH}") extract_source_returncode, _ = run_logged_subprocess(f"unzip -q -o -d {tmp_dir} {download_file_path}") if extract_source_returncode == 0: - logger.debug(f"pyldap source extracted to {BUILD_DIR_PATH}") + logger.debug(f"Extracted pyldap source to {BUILD_DIR_PATH}") else: - logger.error(f"Could not extract pyldap source. Exiting") - return 15 + logger.error(f"Failed to extract pyldap source. See {log_file_path}. Exiting") + exit(45) # Start the build process logger.info(f"Building pyldap {pyldap_version}") @@ -264,6 +268,7 @@ def install_custom_pyldap(venv_interpreter: str) -> int: # Read the pyldap build config file pyldap_config_file_name = "setup.cfg" pyldap_config_file_path = Path(BUILD_DIR_PATH, pyldap_config_file_name) + pyldap_version_from_needs_updated = True logger.debug(f"Reading pyldap build config file {pyldap_config_file_path}") pyldap_config = configparser.ConfigParser() @@ -272,67 +277,70 @@ def install_custom_pyldap(venv_interpreter: str) -> int: pyldap_config.read_file(pyldap_config_file) logger.debug("Read pyldap build config file") except Exception as e: - logger.error(f"Could not read pyldap build config file {pyldap_config_file_path}. {e.strerror}. Exiting") - return 20 + logger.error(f"Failed to read pyldap build config file {pyldap_config_file_path}. {e}. Exiting") + exit(50) # Check for SASL requirement in pyldap build config file logger.debug("Checking for '_ldap' section") if not pyldap_config.has_section("_ldap"): - logger.error("Can't find '_ldap' section in pyldap build config file. Unable to build pyldap. Exiting") - return 25 + logger.warning("Failed to find '_ldap' section in pyldap build config file. pyldap may fail to build") + pyldap_version_from_needs_updated = False + pass else: logger.debug("'_ldap' section found") logger.debug("Checking for 'defines' option") if not pyldap_config.has_option("_ldap", "defines"): - logging.error("Can't find 'defines' option in pyldap build config file. Unable to build pyldap. Exiting") + logging.warning("Failed to find 'defines' option in pyldap build config file. pyldap may fail to build") + pyldap_version_from_needs_updated = False else: logger.debug("'defines' option found") # Remove SASL requirement if present - logger.debug("Removing SASL requirement") + if pyldap_version_from_needs_updated: + logger.debug("Removing SASL requirement") - defines_options = pyldap_config['_ldap']['defines'].split(' ') - build_config_updated = False - try: - defines_options.remove('HAVE_SASL') - pyldap_config['_ldap']['defines'] = " ".join(defines_options) - logger.debug("SASL requirement removed") - build_config_updated = True - except ValueError as e: - logger.warning("SASL requirement not found in pyldap build config file. Build config file will not be modified") - pass + defines_options = pyldap_config['_ldap']['defines'].split(' ') + build_config_updated = False + try: + defines_options.remove('HAVE_SASL') + pyldap_config['_ldap']['defines'] = " ".join(defines_options) + logger.debug("SASL requirement removed") + build_config_updated = True + except ValueError as e: + logger.warning("SASL requirement not found in pyldap build config file. Build config file will not be modified") + pass # Write new build config logger.debug("Writing new pyldap build config") - if build_config_updated: try: with open(pyldap_config_file_path, 'w') as pyldap_config_file: pyldap_config.write(pyldap_config_file) logger.debug("Wrote new pyldap build config") except Exception as e: - logger.error(f"Could not write pyldap build config file {pyldap_config_file_path}. {e.strerror}. Exiting") - return 30 + logger.error(f"Failed to write pyldap build config file {pyldap_config_file_path}. {e}. Exiting") + exit(55) # Build pyldap logger.debug(f"Building pyldap {pyldap_version}") build_pyldap_returncode, _ = run_logged_subprocess(f"cd {BUILD_DIR_PATH} && {VENV_DIR}/bin/python3 setup.py build") if build_pyldap_returncode == 0: - logger.info(f"Built pyldap {pyldap_version}") + logger.debug(f"Built pyldap {pyldap_version}") else: - logger.error(f"Could not build pyldap. Exiting.") - return 35 + logger.error(f"Failed to build pyldap {pyldap_version}. See {log_file_path}. Exiting") + exit(60) # Install pyldap - logger.debug(f"Installing pyldap {pyldap_version}") + logger.debug(f"Installing pyldap {pyldap_version} in virtual environment {VENV_NAME} at {VENV_DIR}") install_pyldap_returncode, _ = run_logged_subprocess(f"cd {BUILD_DIR_PATH} && {VENV_DIR}/bin/python3 setup.py install") if install_pyldap_returncode == 0: - logger.info(f"Installed pyldap {pyldap_version} in virtual environment {VENV_NAME} at {VENV_DIR}") + logger.debug(f"Installed pyldap {pyldap_version}") else: - logger.error(f"Could not install pyldap. Exiting.") - return 40 + logger.error(f"Failed to install pyldap {pyldap_version}. See {log_file_path}. Exiting") + exit(65) + logger.info(f"Finshed installing pyldap {pyldap_version}") return 0 @@ -363,14 +371,6 @@ def is_valid_requirement(line: str) -> bool: def create_environment() -> int: """Creates a virtual environment for webqueue2 - Exit Codes: - 0 = Success - 5 = VENV_DIR already exists - 10 = Could not create VENV_DIR - 11 = Could not install pyldap - 12 = Could not read requirements file - 15 = Could not install requirements - Returns: int: Exit code """ @@ -378,65 +378,68 @@ def create_environment() -> int: logger.info(f"Creating virtual environment {VENV_NAME} at {VENV_DIR}") # Check for an existing virtual environment + logger.debug(f"Creating virtual environment directory at {VENV_DIR}") try: os.mkdir(VENV_DIR) except FileExistsError: - logger.warning(f"The directory {VENV_DIR} already exists. Exiting") - return 5 + logger.error(f"Failed to make directory {VENV_DIR}. It already exists. Exiting") + exit(5) + except PermissionError: + logger.error(f"Failed to make directory {VENV_DIR}. Incorrect permissions. Exiting") + exit(10) + logger.debug(f"Created virtual environment directory") + - # Create virtual environmentc + # Create virtual environment + logger.debug(f"Creating virtual environment {VENV_NAME} at {VENV_DIR}") create_env_returncode, _ = run_logged_subprocess(f"cd {API_DIR} && python3 -m venv {VENV_NAME}", shell=True) if create_env_returncode == 0: - logger.info(f"Virtual environment {VENV_NAME} created at {VENV_DIR}") + logger.info(f"Successfully created virtual environment {VENV_NAME} created at {VENV_DIR}") else: - logger.critical(f"Could not create virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") - return 10 + logger.error(f"Failed to create virtual environment. See {log_file_path}. Exiting") + exit(15) # Check pip version logger.debug("Checking pip version") check_pip_returncode, check_pip_output = run_logged_subprocess(f"{VENV_DIR}/bin/pip --version") - - if check_pip_returncode != 0: - logger.warning("Could not check pip version. Virtual environment dependencies may not install") - - pip_version_full = check_pip_output.split()[1] - logger.debug(f"pip version is {pip_version_full}") + if check_pip_returncode == 0: + pip_version_full = check_pip_output.split()[1] + logger.debug(f"pip version is {pip_version_full}") + else: + logger.warning("Failed to check pip version. Virtual environment dependencies may not install") - # Update pip + # Update pip if needed pip_version_major = pip_version_full.split(".")[0] if int(pip_version_major) < 19: - logger.info(f"pip verion is {pip_version_major}.x (pip >= {TARGET_PIP_VERSION}.x needed.) Upgrading pip") + logger.debug(f"pip verion is {pip_version_major}.x (pip >= {TARGET_PIP_VERSION}.x needed.) Upgrading pip") update_pip_returncode, update_pip_output = run_logged_subprocess(f"{VENV_DIR}/bin/pip install --upgrade pip") - if update_pip_returncode == 0: - logger.info(update_pip_output.split("\n")[-2]) + pip_install_message = update_pip_output.split("\n")[-2] + logger.debug(pip_install_message) else: logger.warning("Failed to update pip. Virtual environment dependencies may not install") # Install requirements - logger.info("Installing requirements") + logger.info("Installing virtual environment requirements") # Install python-ldap - install_pyldap_returncode = install_custom_pyldap(VENV_INTERPRETER) - if install_pyldap_returncode != 0: - logger.error("Could not install pyldap. Exiting.") - return 11 + install_custom_pyldap(VENV_INTERPRETER) # Install the rest of the requirements from the requirements file logger.debug(f"Checking for venv requirements file {VENV_REQUIREMENTS_FILE}") if not os.path.exists(VENV_REQUIREMENTS_FILE): - logger.warning(f"Could not find requirements file {VENV_REQUIREMENTS_FILE}. No requirements will be installed.") + logger.warning(f"Could not find requirements file {VENV_REQUIREMENTS_FILE}. No requirements will be installed") return 0 logger.debug("Found requirements file") # Get raw requirements from requirements file - logger.debug("Reading raw requirements from requirements file") + logger.debug(f"Reading raw requirements from requirements file {VENV_REQUIREMENTS_FILE}") try: with open(VENV_REQUIREMENTS_FILE) as requirements_file: raw_requirements = requirements_file.readlines() except Exception as e: - logger.warning(f"Could not read requirements file {VENV_REQUIREMENTS_FILE}. {e.strerror}. Exiting.") - return 12 + logger.warning(f"Failed read requirements file {VENV_REQUIREMENTS_FILE}. {e}. Exiting") + exit(20) logger.debug("Read raw requirements from requirements file") # Filter and clean requirements @@ -445,7 +448,7 @@ def create_environment() -> int: for requirement in raw_requirements: if is_valid_requirement(requirement): valid_requirements.append(requirement.strip()) - logger.debug("Validated requirements") + logger.debug(f"Validated {len(valid_requirements)} requirements") # Generate requirements string logger.debug("Generating requirements string") @@ -454,23 +457,22 @@ def create_environment() -> int: requirements_string += f"'{requirement}' " logger.debug(f"Generated requirements string {requirements_string}") - # Install requirements + # Install requirements + logger.debug("Installing requirements") install_requirements_returncode, _ = run_logged_subprocess(f"{VENV_DIR}/bin/pip install {requirements_string}") if install_requirements_returncode == 0: logger.info("Successfully installed requirements") - return 0 else: - logger.critical("Failed to install requirements. Exiting") - return 15 + logger.error(f"Failed to install requirements. See {log_file_path}. Exiting") + exit(25) + + logger.info("Finished creating virtual environment") + return 0 def delete_environment() -> int: """Deletes a virtual environment for webqueue2 - Exit Codes: - 0 = Success - 5 = Could not delete VENV_DIR - Returns: int: Exit code """ @@ -481,34 +483,21 @@ def delete_environment() -> int: logger.info(f"Successfully deleted virtual environment {VENV_NAME} at {VENV_DIR}") return 0 else: - logger.critical(f"Failed to delete virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") - return 5 + logger.error(f∆"Failed to delete virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") + exit(70) def reset_environment() -> int: """Resets a virtual environment for webqueue2 - Exit Codes: - 0 = Success - 5 = Could not delete VENV_DIR - 10 = Could not create VENV_DIR - Returns: int: Exit code """ logger.info(f"Resetting virtual environment {VENV_NAME} at {VENV_DIR}") - delete_returncode = delete_environment() - if delete_returncode != 0: - logger.critical(f"Failed to reset virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") - return 5 - create_returncode = create_environment() - if create_returncode != 0: - logger.critical(f"Failed to reset virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") - return 10 - logger.info(f"Successfully reset virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") + return 0 if __name__ == "__main__": From 259564390ff95a601475f160d0c78c2e8a794902 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Wed, 3 Feb 2021 11:32:10 -0500 Subject: [PATCH 082/129] Refactored code to reduce number of props for ItemTableSortButtons component; added prop types to ItemTableSortButtons; renamed folder to use same naming convention --- src/components/ItemTable/ItemTable.js | 76 +++++++++++-------- .../ItemTableSortButtons.js | 31 -------- .../ItemTableSortButtons.md | 0 .../ItemTableSortButtons.js | 43 +++++++++++ .../ItemTableSortButtons.md | 15 ++++ .../index.js | 0 6 files changed, 104 insertions(+), 61 deletions(-) delete mode 100644 src/components/ItemTableSortButtons.js/ItemTableSortButtons.js delete mode 100644 src/components/ItemTableSortButtons.js/ItemTableSortButtons.md create mode 100644 src/components/ItemTableSortButtons/ItemTableSortButtons.js create mode 100644 src/components/ItemTableSortButtons/ItemTableSortButtons.md rename src/components/{ItemTableSortButtons.js => ItemTableSortButtons}/index.js (100%) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 4160b41..7a9e8f8 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -1,11 +1,11 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Grid, makeStyles, useTheme } from "@material-ui/core"; +import { makeStyles, useTheme, TableContainer, Table, TableHead, TableRow, TableCell, Grid, TableBody, } from "@material-ui/core"; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/"; -import ItemtTableSortButtons from "../ItemTableSortButtons.js"; +import ItemtTableSortButtons from "../ItemTableSortButtons/" export default function ItemTable({ data, rowCanBeSelected }) { const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); @@ -71,37 +71,53 @@ export default function ItemTable({ data, rowCanBeSelected }) { return ( -
+
{headerGroups.map(headerGroup => ( - {headerGroup.headers.map(column => ( - - - - - {column.render("Filter")} - - - { - const isSortedAsc = column.isSorted && !column.isSortedDesc; - isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false); - }} - onClickDesc={_ => { - const isSortedDesc = column.isSorted && column.isSortedDesc; - isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true) - }} - colorAsc={column.isSorted && column.isSortedDesc === false ? "secondary" : "default"} - colorDesc={column.isSorted && column.isSortedDesc ? "secondary" : "default"} - columnSortAscProps={column.getSortByToggleProps()} - columnSortDescProps={column.getSortByToggleProps(column.isSortedDesc)} - /> + {headerGroup.headers.map(column => { + // Determine sort directions + const isSortedAsc = column.isSorted && !column.isSortedDesc; + const isSortedDesc = column.isSorted && column.isSortedDesc; + + return ( + + + + + {column.render("Filter")} + + + (isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false)) + }} + sortDescArrowProps={{ + ...column.getSortByToggleProps(), + onClick: _ => (isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true)) + }} + sortDirection={(_ => { + if (isSortedAsc) { + return 'asc'; + } + else if (isSortedDesc) { + return 'desc'; + } + else { + return undefined; + } + })()} + /> + - - - - ))} + + + ); + })} ))} @@ -123,7 +139,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { {...row.getRowProps()} > {row.cells.map(cell => ( {cell.render("Cell")} diff --git a/src/components/ItemTableSortButtons.js/ItemTableSortButtons.js b/src/components/ItemTableSortButtons.js/ItemTableSortButtons.js deleted file mode 100644 index f7c6cd8..0000000 --- a/src/components/ItemTableSortButtons.js/ItemTableSortButtons.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import PropTypes from "prop-types"; -import { ButtonGroup, IconButton } from "@material-ui/core"; -import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; - -export default function ItemTableSortButtons({ onClickAsc, onClickDesc, colorAsc, colorDesc, columnSortAscProps, columnSortDescProps }) { - return ( - - - - - - - - - ) -} - - diff --git a/src/components/ItemTableSortButtons.js/ItemTableSortButtons.md b/src/components/ItemTableSortButtons.js/ItemTableSortButtons.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/ItemTableSortButtons/ItemTableSortButtons.js b/src/components/ItemTableSortButtons/ItemTableSortButtons.js new file mode 100644 index 0000000..564c1fb --- /dev/null +++ b/src/components/ItemTableSortButtons/ItemTableSortButtons.js @@ -0,0 +1,43 @@ +import React from 'react'; +import PropTypes from "prop-types"; +import { ButtonGroup, IconButton } from "@material-ui/core"; +import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; + +export default function ItemTableSortButtons({ sortDirection, sortAscArrowProps, sortDescArrowProps }) { + return ( + + + + + + + + + ) +} + +ItemTableSortButtons.propTypes = { + /** String representing sort direction. */ + "sortDirection": PropTypes.oneOf(['asc', 'desc', undefined ]), + /** Props passed to ArrowUpward component. */ + "sortAscArrowProps": PropTypes.object, + /** Props passed to ArrowDownward component. */ + "sortDescArrowProps": PropTypes.object +}; + +ItemTableSortButtons.defaultProps = { + "sortDirection": undefined, + "sortAscArrowProps": { onClick: _ => alert("No onClick function set. This does nothing.") }, + "sortDescArrowProps": { onClick: _ => alert("No onClick function set. This does nothing.") } +}; + diff --git a/src/components/ItemTableSortButtons/ItemTableSortButtons.md b/src/components/ItemTableSortButtons/ItemTableSortButtons.md new file mode 100644 index 0000000..4739b63 --- /dev/null +++ b/src/components/ItemTableSortButtons/ItemTableSortButtons.md @@ -0,0 +1,15 @@ +The ItemTableSortButtons are used to sort in ascending or descending order based on which button is selected. It is to be used with the [ItemTable](/#/Components/ItemTable). + +```jsx +import React, { useState, useEffect } from "react"; + + + + + + +``` + +```jsx static + +``` \ No newline at end of file diff --git a/src/components/ItemTableSortButtons.js/index.js b/src/components/ItemTableSortButtons/index.js similarity index 100% rename from src/components/ItemTableSortButtons.js/index.js rename to src/components/ItemTableSortButtons/index.js From db580eefb0fc01014b81c00e337d80af0871f33e Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Wed, 3 Feb 2021 12:35:03 -0500 Subject: [PATCH 083/129] Update refresh token path --- api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/api.py b/api/api.py index 5a52767..04a6373 100644 --- a/api/api.py +++ b/api/api.py @@ -38,7 +38,7 @@ # Restrict cookies using SameSite=strict flag app.config["JWT_COOKIE_SAMESITE"] = "strict" # Restrict refresh tokens to /token/refresh endpoint -app.config["JWT_REFRESH_COOKIE_PATH"] = '/tokens/refresh' +app.config["JWT_REFRESH_COOKIE_PATH"] = '/api/tokens/refresh' # Set the cookie key for CRSF validation string # This is the default value. Adding it for easy reference app.config["JWT_REFRESH_CSRF_HEADER_NAME"] = "X-CSRF-TOKEN" From 1b0fafb95ca9e76aca204be806bc59cff4662447 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Wed, 3 Feb 2021 12:50:20 -0500 Subject: [PATCH 084/129] Update hompage entry --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8b496df..1934448 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webqueue2", - "homepage": "/qwebtest/", + "homepage": "/webqueue/q2", "proxy": "http://localhost:5000/", "version": "0.1.0", "private": true, From 311ad72a2c6d79d7eba63de8c698a1b749577345 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Wed, 3 Feb 2021 13:17:29 -0500 Subject: [PATCH 085/129] Updated auth utilities paths --- src/auth/utilities.js | 4 ++-- src/components/ItemTable/ItemTable.js | 5 +---- src/index.js | 14 +++++++------- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/auth/utilities.js b/src/auth/utilities.js index 8800954..db19113 100644 --- a/src/auth/utilities.js +++ b/src/auth/utilities.js @@ -17,7 +17,7 @@ export async function login(username, password){ body: JSON.stringify({ "username": username, "password": password}) }; - let loginResponse = await fetch("/login", loginInit); + let loginResponse = await fetch("/api/login", loginInit); let data = await loginResponse.json(); if (data === null){ @@ -44,7 +44,7 @@ export async function refresh(csrf_refresh_token){ headers: {'X-CSRF-TOKEN': csrf_refresh_token}, }; - let refreshResponse = await fetch("/tokens/refresh", refreshInit); + let refreshResponse = await fetch("/api/tokens/refresh", refreshInit); let data = await refreshResponse.json(); if (data === null){ diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index d94dc72..55881b9 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -52,10 +52,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, { Header: 'Date Received', accessor: 'dateReceived', sortInverted: true, Cell: ({ value }) => }, - { Header: 'Last Updated', accessor: 'lastUpdated', }, - { Header: 'Department', accessor: 'department' }, - { Header: 'Building', accessor: 'building' }, - { Header: 'Date Received', accessor: 'dateReceived', }, + ], []); const tableInstance = useTable( { diff --git a/src/index.js b/src/index.js index 799ad12..b0707de 100644 --- a/src/index.js +++ b/src/index.js @@ -15,13 +15,13 @@ export const history = createBrowserHistory({ ReactDOM.render( - - - - - - - + + + + + + + , document.getElementById('root') ); From 7cac01a4df1d3b42081ddeb60eaf325889e0d47e Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Wed, 3 Feb 2021 13:20:58 -0500 Subject: [PATCH 086/129] Updated API routes --- src/components/AppView/AppView.js | 2 +- src/components/QueueSelector/QueueSelector.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 75c7c60..5018059 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -41,7 +41,7 @@ export default function AppView({ setDarkMode }){ myHeaders.append("Authorization", `Bearer ${access_token}`); let requestOptions = { headers: myHeaders }; - const apiResponse = await fetch(`/api/${queuesToLoad}`, requestOptions); + const apiResponse = await fetch(`/api/data/${queuesToLoad}`, requestOptions); const queueJson = await apiResponse.json(); setQueues(queueJson); } else { diff --git a/src/components/QueueSelector/QueueSelector.js b/src/components/QueueSelector/QueueSelector.js index aa1a816..d3fb031 100644 --- a/src/components/QueueSelector/QueueSelector.js +++ b/src/components/QueueSelector/QueueSelector.js @@ -22,7 +22,7 @@ const getQueueCounts = async (access_token) => { myHeaders.append("Authorization", `Bearer ${access_token}`); let requestOptions = { headers: myHeaders }; - const apiResponse = await fetch(`/api/get_queues`, requestOptions); + const apiResponse = await fetch(`/api/data/get_queues`, requestOptions); const queueCountJson = await apiResponse.json(); return queueCountJson; From ec5680cf4d86ae4c67dd545e249bd7ed463104ee Mon Sep 17 00:00:00 2001 From: "Campbell, Justin" Date: Thu, 4 Feb 2021 14:20:02 -0500 Subject: [PATCH 087/129] Remove breaking character --- utils/venv-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/venv-manager.py b/utils/venv-manager.py index 051f7eb..95e6eee 100644 --- a/utils/venv-manager.py +++ b/utils/venv-manager.py @@ -483,7 +483,7 @@ def delete_environment() -> int: logger.info(f"Successfully deleted virtual environment {VENV_NAME} at {VENV_DIR}") return 0 else: - logger.error(f∆"Failed to delete virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") + logger.error(f"Failed to delete virtual environment {VENV_NAME} at {VENV_DIR}. Exiting") exit(70) @@ -516,4 +516,4 @@ def reset_environment() -> int: elif action == "reset": exit(reset_environment()) else: - logger.critical(f'Invalid argument {action}') \ No newline at end of file + logger.critical(f'Invalid argument {action}') From 1a84209f5bc9984704cb8a916cc5b7563489a6c6 Mon Sep 17 00:00:00 2001 From: "Campbell, Justin" Date: Thu, 4 Feb 2021 14:22:39 -0500 Subject: [PATCH 088/129] Prepend API calls with subdirectory path --- src/auth/utilities.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/auth/utilities.js b/src/auth/utilities.js index db19113..2a318e8 100644 --- a/src/auth/utilities.js +++ b/src/auth/utilities.js @@ -17,7 +17,7 @@ export async function login(username, password){ body: JSON.stringify({ "username": username, "password": password}) }; - let loginResponse = await fetch("/api/login", loginInit); + let loginResponse = await fetch(`${process.env.PUBLIC_URL}/api/login`, loginInit); let data = await loginResponse.json(); if (data === null){ @@ -44,7 +44,7 @@ export async function refresh(csrf_refresh_token){ headers: {'X-CSRF-TOKEN': csrf_refresh_token}, }; - let refreshResponse = await fetch("/api/tokens/refresh", refreshInit); + let refreshResponse = await fetch(`${process.env.PUBLIC_URL}/api/tokens/refresh`, refreshInit); let data = await refreshResponse.json(); if (data === null){ @@ -56,4 +56,4 @@ export async function refresh(csrf_refresh_token){ } return data.access_token || false; -} \ No newline at end of file +} From 1a91015486bcc8c54f11c30d01d324feeb0e431f Mon Sep 17 00:00:00 2001 From: "Campbell, Justin" Date: Thu, 4 Feb 2021 14:23:53 -0500 Subject: [PATCH 089/129] Prepend API calls with subdirectory path --- src/components/AppView/AppView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 5018059..e849647 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -41,7 +41,7 @@ export default function AppView({ setDarkMode }){ myHeaders.append("Authorization", `Bearer ${access_token}`); let requestOptions = { headers: myHeaders }; - const apiResponse = await fetch(`/api/data/${queuesToLoad}`, requestOptions); + const apiResponse = await fetch(`${process.env.PUBLIC_URL}/api/data/${queuesToLoad}`, requestOptions); const queueJson = await apiResponse.json(); setQueues(queueJson); } else { @@ -140,4 +140,4 @@ export default function AppView({ setDarkMode }){ AppView.propTypes = {}; -AppView.defaultProps = {}; \ No newline at end of file +AppView.defaultProps = {}; From c3792a0323bfb6594a543617b0ebe2dc1c8639a6 Mon Sep 17 00:00:00 2001 From: "Campbell, Justin" Date: Thu, 4 Feb 2021 14:25:09 -0500 Subject: [PATCH 090/129] Update QueueSelector.js --- src/components/QueueSelector/QueueSelector.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/QueueSelector/QueueSelector.js b/src/components/QueueSelector/QueueSelector.js index d3fb031..e39fb87 100644 --- a/src/components/QueueSelector/QueueSelector.js +++ b/src/components/QueueSelector/QueueSelector.js @@ -22,7 +22,7 @@ const getQueueCounts = async (access_token) => { myHeaders.append("Authorization", `Bearer ${access_token}`); let requestOptions = { headers: myHeaders }; - const apiResponse = await fetch(`/api/data/get_queues`, requestOptions); + const apiResponse = await fetch(`${process.env.PUBLIC_URL}/api/data/get_queues`, requestOptions); const queueCountJson = await apiResponse.json(); return queueCountJson; @@ -173,4 +173,4 @@ QueueSelector.propTypes = { "value": PropTypes.array.isRequired, /** Function to update state variable that manages selected queues. */ "setValue": PropTypes.func.isRequired, -}; \ No newline at end of file +}; From e2c00d15f0c37971e25e3f553e7f5bdea4bfe3cb Mon Sep 17 00:00:00 2001 From: "Campbell, Justin" Date: Mon, 8 Feb 2021 10:43:22 -0500 Subject: [PATCH 091/129] Add comment explaining overflow fix --- src/components/ItemTableFilter/ItemTableFilter.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/ItemTableFilter/ItemTableFilter.js b/src/components/ItemTableFilter/ItemTableFilter.js index bf64f60..c3ef252 100644 --- a/src/components/ItemTableFilter/ItemTableFilter.js +++ b/src/components/ItemTableFilter/ItemTableFilter.js @@ -10,6 +10,9 @@ export default function ItemTableFilter({ label, onChange }) { }); const classes = useStyles(); + // The FormControl is wrapped in a box with overflowX=hidden to prevent the + // InputLabel text from going outside its textfield. + // See: https://github.itap.purdue.edu/ECN/webqueue2/issues/156 return ( Date: Mon, 8 Feb 2021 14:34:23 -0500 Subject: [PATCH 092/129] Updated ItemTableSortButtons docs with examples of usage --- .../ItemTableSortButtons.md | 59 ++++++++++++++++++- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/src/components/ItemTableSortButtons/ItemTableSortButtons.md b/src/components/ItemTableSortButtons/ItemTableSortButtons.md index 4739b63..33037b2 100644 --- a/src/components/ItemTableSortButtons/ItemTableSortButtons.md +++ b/src/components/ItemTableSortButtons/ItemTableSortButtons.md @@ -1,15 +1,68 @@ The ItemTableSortButtons are used to sort in ascending or descending order based on which button is selected. It is to be used with the [ItemTable](/#/Components/ItemTable). +## Default Usage ```jsx import React, { useState, useEffect } from "react"; +import { Paper, TableCell, } from "@material-ui/core"; +import ItemTableFilter from "../ItemTableFilter/"; - + + + + + +``` +```jsx static + + ``` +Used without any props, the ItemTableSort will display arrows with default styling. + + +## Sorting by Ascending +If the `sortDirection` prop is passed `asc`, the ItemTableSortButtons will display the active styling for the ascending arrow. If a onClick function is present the table will run that function on button click +```jsx +import React, { useState, useEffect } from "react"; +import { Paper, TableCell, } from "@material-ui/core"; +import ItemTableFilter from "../ItemTableFilter/"; + + + + + + + + + +``` ```jsx static - -``` \ No newline at end of file + +``` +## Sorting by Descending +If the `sortDirection` prop is passed `desc`, the ItemTableSortButtons will display the active styling for the descending arrow. If a onClick function is present the table will run that function on button click +```jsx +import React, { useState, useEffect } from "react"; +import { Paper, TableCell, } from "@material-ui/core"; +import ItemTableFilter from "../ItemTableFilter/"; + + + + + + + + + + +``` +```jsx static + +``` + + + From c7e264f079251e7d6dc436f815a367f88f965c9a Mon Sep 17 00:00:00 2001 From: benne238 Date: Thu, 11 Feb 2021 16:19:29 -0500 Subject: [PATCH 093/129] removal of wekzeug.security import from api --- api/api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/api/api.py b/api/api.py index 65e911f..73128f6 100644 --- a/api/api.py +++ b/api/api.py @@ -5,7 +5,6 @@ jwt_required, get_jwt_identity, jwt_refresh_token_required, set_refresh_cookies, unset_refresh_cookies ) -from werkzeug.security import check_password_hash import os, dotenv from easyad import EasyAD from ldap.filter import escape_filter_chars From b56e22549e249bbfd4c79e7fd0a92f544df70431 Mon Sep 17 00:00:00 2001 From: benne238 Date: Thu, 11 Feb 2021 16:21:27 -0500 Subject: [PATCH 094/129] update requirements.txt --- api/requirements.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api/requirements.txt b/api/requirements.txt index f7f9b7a..fcd08ee 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -17,4 +17,9 @@ Flask-JWT-Extended PyJWT == 1.* # Specify pyldap version for custom build. This is not installed by pip. pyldap == 3.3.1 -easyad \ No newline at end of file +easyad + +# API Documentation +mkdocs +mkdocs-material +mkautodoc \ No newline at end of file From 3139fb663534c06304e2d3a2ee30e9d8abe77ad5 Mon Sep 17 00:00:00 2001 From: benne238 Date: Thu, 11 Feb 2021 16:25:39 -0500 Subject: [PATCH 095/129] Removed duplicate columns in ItemTable (cherry picked from commit ecc31059304ff85d9089c81927dd74a017900e37) --- src/components/ItemTable/ItemTable.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 6c4df69..05e4280 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -47,10 +47,11 @@ export default function ItemTable({ data, rowCanBeSelected }) { { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, { Header: 'Priority', accessor: 'priority' }, - { Header: 'Last Updated', accessor: 'lastUpdated', Cell: ({ value }) => }, + { Header: 'Last Updated', accessor: 'lastUpdated', sortInverted: true, Cell: ({ value }) => }, { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, - { Header: 'Date Received', accessor: 'dateReceived', Cell: ({ value }) => }, + { Header: 'Date Received', accessor: 'dateReceived', sortInverted: true, Cell: ({ value }) => }, + ], []); const tableInstance = useTable( From f48de176215b35381029fc3bdf0819094c30524e Mon Sep 17 00:00:00 2001 From: benne238 Date: Thu, 11 Feb 2021 16:59:11 -0500 Subject: [PATCH 096/129] update gitignore for .egg files --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e238c91..ac3f93c 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ yarn-error.log* /api/venv __pycache__/ venv-manager.log -/api/.env \ No newline at end of file +/api/.env +*.egg* \ No newline at end of file From 8eb152d22f2601cfb4a12265e777773c76641f9e Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 12 Feb 2021 09:25:16 -0500 Subject: [PATCH 097/129] Add from field to ItemTable --- src/components/ItemTable/ItemTable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index ea43466..497296d 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -44,6 +44,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { () => [ { Header: 'Queue', accessor: 'queue', }, { Header: 'Item #', accessor: 'number' }, + { Header: 'From', accessor: 'userAlias'}, { Header: 'Assigned To', accessor: 'assignedTo' }, { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, From fd49dd7bf969733b4a86daca87d01268c5cbaae3 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 21 Feb 2021 17:16:48 -0500 Subject: [PATCH 098/129] Add headersOnly to docstrings --- api/ECNQueue.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index f9b6fce..3189423 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -58,7 +58,10 @@ #------------------------------------------------------------------------------# def isValidItemName(name: str) -> bool: - """Returns true if file name is a valid item name + """Returns true if file name is a valid item name. + + A file name is true if it contains between 1 and 3 integer numbers allowing for + any integer between 0 and 999. Example: isValidItemName("21") -> true @@ -87,6 +90,11 @@ class Item: # Create an Item without parsing its contents (ce100) >>> item = Item("ce", 100, headersOnly=True) + Args: + queue (str): The name of the Item's queue. + number (int): The number of the Item. + headersOnly (bool, optional): Whether or not to parse headers only. Defaults to True. + Attributes: lastUpdated: An ISO 8601 formatted time string showing the last time the file was updated according to the filesystem. headers: A list of dictionaries containing header keys and values. @@ -1192,7 +1200,6 @@ def toJson(self) -> dict: def __repr__(self) -> str: return self.queue + str(self.number) -# TODO: Make Queue iterable using __iter__. See: https://thispointer.com/python-how-to-make-a-class-iterable-create-iterator-class-for-it/ class Queue: """A collection of Items. @@ -1202,6 +1209,10 @@ class Queue: # Create a queue without parsing item contents (ce) >>> queue = Queue("ce", headersOnly=False) + Args: + queue (str): The name of the queue. + headersOnly (bool, optional): Whether or not to parse headers only. Defaults to True. + Attributes: name: The name of the queue. items: A list of Items in the queue. @@ -1213,6 +1224,7 @@ def __init__(self, name: str, headersOnly: bool = True) -> None: self.headersOnly = headersOnly self.__directory = queueDirectory + "/" + self.name + "/" self.items = self.__getItems() + self._index = 0 self.jsonData = { "name": self.name, From f960cd3061f26a6112352c114b0e92496bfd02bf Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 21 Feb 2021 17:21:52 -0500 Subject: [PATCH 099/129] Make Queue objects iterable --- api/ECNQueue.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 3189423..1aaa66b 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1271,6 +1271,13 @@ def __len__(self) -> int: def __repr__(self) -> str: return f'{self.name}_queue' + # Implements the interable interface requirements by passing direct references + # to the item list's interable values. + def __iter__(self) -> list: + return iter(self.items) + def __next__(self) -> int: + return self.items.__next__() + def getValidQueues() -> list: """Returns a list of queues on the filesystem excluding ignored queues. From c435fe1b948e028ff74977f135d08691b40425c4 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 21 Feb 2021 17:30:53 -0500 Subject: [PATCH 100/129] Update iterable interface to avoid parse error --- api/ECNQueue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 1aaa66b..e0b9d77 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1276,7 +1276,7 @@ def __repr__(self) -> str: def __iter__(self) -> list: return iter(self.items) def __next__(self) -> int: - return self.items.__next__() + return iter(self.items).__next__() def getValidQueues() -> list: """Returns a list of queues on the filesystem excluding ignored queues. From 6a1b660da699fea45c8bff9b79da37e7d3a26f1c Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 21 Feb 2021 17:33:42 -0500 Subject: [PATCH 101/129] Add example to Queue endpoint docs --- api/api.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/api/api.py b/api/api.py index 301117b..f84cb9d 100644 --- a/api/api.py +++ b/api/api.py @@ -15,7 +15,6 @@ def get(self, queue: str, number: int) -> str: """Returns the JSON representation of the item requested. Example: - /api/ce/100 returns: { "lastUpdated": "07-23-20 10:11 PM", "headers": [...], @@ -48,6 +47,12 @@ class Queue(Resource): def get(self, queue: str) -> str: """Returns the JSON representation of the queue requested. + Example: + { + "name": ce, + "items": [...] + } + Args: queue (str): The queue requested. @@ -83,6 +88,8 @@ def get(self) -> list: """ return ECNQueue.getQueueCounts() + + api.add_resource(QueueList, "/api/get_queues") api.add_resource(Item, "/api//") api.add_resource(Queue, "/api/") From 748a49ccfc1c6ce340face856b6e7c7c141b331d Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 22 Feb 2021 14:00:23 -0500 Subject: [PATCH 102/129] Fix Queue endpoint error from merge --- api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/api.py b/api/api.py index 1426d8a..d8b0600 100644 --- a/api/api.py +++ b/api/api.py @@ -211,7 +211,7 @@ def get(self, queues: str) -> tuple: tuple: Queues as JSON and HTTP response code. """ headersOnly = False if request.args.get("headersOnly") == "False" else True - queues_requested = queue.split("+") + queues_requested = queues.split("+") queue_list = [] for queue in queues_requested: From 666135fde5880bb1c4278c25fba088f4f914aa2b Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 22 Feb 2021 15:33:00 -0500 Subject: [PATCH 103/129] Create ItemProvider w/ Docs --- src/components/ItemProvider/ItemProvider.js | 29 +++++++++++++++ src/components/ItemProvider/ItemProvider.md | 41 +++++++++++++++++++++ src/components/ItemProvider/index.js | 1 + 3 files changed, 71 insertions(+) create mode 100644 src/components/ItemProvider/ItemProvider.js create mode 100644 src/components/ItemProvider/ItemProvider.md create mode 100644 src/components/ItemProvider/index.js diff --git a/src/components/ItemProvider/ItemProvider.js b/src/components/ItemProvider/ItemProvider.js new file mode 100644 index 0000000..3434aa0 --- /dev/null +++ b/src/components/ItemProvider/ItemProvider.js @@ -0,0 +1,29 @@ +import React, { useState, createContext, useContext, useEffect } from "react"; + +const ItemContext = createContext(); +const ItemSetterContext = createContext(); + +export const useItem = () => useContext(ItemContext); +export const useItemSetter = () => useContext(ItemSetterContext); + + + +export default function ItemProvider({ children }) { + const [item, setItem] = useState( {} ); + + useEffect( _ => console.log("Current Item is: ", item)); + + const setItemWrapper = (newItem) => { + console.log("Old Item: ", item); + setItem(newItem); + console.log("Set new item."); + } + + return ( + + + {children} + + + ); +}; \ No newline at end of file diff --git a/src/components/ItemProvider/ItemProvider.md b/src/components/ItemProvider/ItemProvider.md new file mode 100644 index 0000000..4653d82 --- /dev/null +++ b/src/components/ItemProvider/ItemProvider.md @@ -0,0 +1,41 @@ +Utility component that uses [React Contexts](https://reactjs.org/docs/context.html) [React Stateful Variables](https://reactjs.org/docs/hooks-state.html) to provide global access to the active item object. + +Two functions are exported: + +Function | Descrioption +- | - +`useItem` | Returns a reference to the state variable holding the current Item. Defaults to `false`. +`useItemSetter` | Returns a reference to the state variable update function. + +For an in depth explanation of this pattern, see [this GitHub comment](https://github.itap.purdue.edu/ECN/webqueue2/issues/15#issuecomment-341). + + +## Usage +```jsx static +// App + + + +``` + +```jsx static +// SomeComponent +import { useEffect } from "react"; +import { useItem, useItemSetter } from "ItemProvider"; + +const activeItem = useItem(); +const setActiveItem = useItemSetter(); + +useEffect( + let item = someFuncToGetItem(); + setActiveItem(item); +); + +return( + { + item + ?

{`${activeItem.queue} ${activeItem.number} was last updated ${activeItem.lastUpdated}.`}

+ :

No item is currently loaded.

+ } +); +``` \ No newline at end of file diff --git a/src/components/ItemProvider/index.js b/src/components/ItemProvider/index.js new file mode 100644 index 0000000..3186bd3 --- /dev/null +++ b/src/components/ItemProvider/index.js @@ -0,0 +1 @@ +export {default, useItem, useItemSetter } from "./ItemProvider"; \ No newline at end of file From 27f9fba335e0c754d89c07d8c845e4a1776b9147 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 22 Feb 2021 15:33:20 -0500 Subject: [PATCH 104/129] Replace activeItem state variable with context provider values --- src/components/AppView/AppView.js | 4 +++- src/index.js | 10 +++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 75c7c60..1f5c459 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -9,9 +9,11 @@ import ItemViewAppBar from "../ItemViewAppBar/"; import ItemView from "../ItemView/"; import QueueSelector from "../QueueSelector/"; import { useToken } from "../AuthProvider/"; +import { useItem, useItemSetter } from "../ItemProvider/"; export default function AppView({ setDarkMode }){ - const [activeItem, setActiveItem] = useState({}); + const activeItem = useItem(); + const setActiveItem = useItemSetter(); const [sidebarOpen, setSidebarOpen] = useState(false); const [queues, setQueues] = useState([]); const [items, setItems] = useState([]); diff --git a/src/index.js b/src/index.js index 799ad12..86dc439 100644 --- a/src/index.js +++ b/src/index.js @@ -7,6 +7,8 @@ import { CssBaseline } from '@material-ui/core'; import { BrowserRouter as Router } from 'react-router-dom'; import { CookiesProvider } from "react-cookie"; import AuthProvider from "./components/AuthProvider/"; +import ItemProvider from "./components/ItemProvider/"; + export const history = createBrowserHistory({ basename: process.env.PUBLIC_URL @@ -17,9 +19,11 @@ ReactDOM.render( - - - + + + + + , From abb9a7976e503a5ceeb4e8da2014595084999831 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Mon, 22 Feb 2021 17:57:14 -0500 Subject: [PATCH 105/129] Implement code for testing skeleton view UI in ItemBodyView --- src/components/ItemBodyView/ItemBodyView.js | 36 +++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/components/ItemBodyView/ItemBodyView.js b/src/components/ItemBodyView/ItemBodyView.js index 08a57f9..eda0813 100644 --- a/src/components/ItemBodyView/ItemBodyView.js +++ b/src/components/ItemBodyView/ItemBodyView.js @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import { Timeline, TimelineItem, TimelineSeparator, TimelineConnector, TimelineContent, TimelineDot } from '@material-ui/lab'; +import { Timeline, TimelineItem, TimelineSeparator, TimelineConnector, TimelineContent, TimelineDot, Skeleton } from '@material-ui/lab'; import { makeStyles } from "@material-ui/core"; import DirectoryInformation from "../DirectoryInformation/"; import Assignment from "../Assignment/"; @@ -41,11 +41,11 @@ export default function ItemBodyView({ item }) { case "status": return case "assignment": - return + return case "reply_to_user": return case "reply_from_user": - return + return case "parse_error": return default: @@ -53,9 +53,14 @@ export default function ItemBodyView({ item }) { }; }; + const testing = true; + return ( - {objectIsEmpty(item) ? "" : item.content.map((section) => ( + {/* Below is the original ternary operation for the map fucntion for future reference */} + {/* {objectIsEmpty(item) ? "" : item.content.map((section) */} + + {testing ? Object.keys(item).map((section) => ( - {generateTimelineItem(section)} + - ))} + )) + : item.content.map((section) => ( + + + + + + {item === undefined + ? + : generateTimelineItem(section) + } + + + ))} ); }; From c73fb0e21b96a15268667e812f250b14d5f084c9 Mon Sep 17 00:00:00 2001 From: wrigh393 Date: Mon, 22 Feb 2021 21:55:19 -0500 Subject: [PATCH 106/129] WIP Skeleton view for ItemTable --- src/components/AppView/AppView.js | 5 +- src/components/ItemTable/ItemTable.js | 89 ++++++++++++++------------- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 75c7c60..abcc5ed 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -17,6 +17,7 @@ export default function AppView({ setDarkMode }){ const [items, setItems] = useState([]); const [selectedQueues, setSelectedQueues] = useState([]); const [queueSelectorOpen, setQueueSelectorOpen] = useState(false); + const [isLoading, setIsLoading] = useState(true); const access_token = useToken(); @@ -43,8 +44,10 @@ export default function AppView({ setDarkMode }){ const apiResponse = await fetch(`/api/${queuesToLoad}`, requestOptions); const queueJson = await apiResponse.json(); + setIsLoading(false); setQueues(queueJson); } else { + setIsLoading(true) setQueues([]) } } @@ -103,7 +106,7 @@ export default function AppView({ setDarkMode }){ value={selectedQueues} setValue={setSelectedQueues} /> - +
diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 497296d..0cc18b9 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -8,8 +8,9 @@ import ItemTableFilter from "../ItemTableFilter/" import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; import ItemTableCell from "../ItemTableCell"; import LastUpdatedCell from "../LastUpdatedCell/"; +import { Skeleton } from "@material-ui/lab"; -export default function ItemTable({ data, rowCanBeSelected }) { +export default function ItemTable({ data, rowCanBeSelected, loading }) { const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); const theme = useTheme(); @@ -44,7 +45,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { () => [ { Header: 'Queue', accessor: 'queue', }, { Header: 'Item #', accessor: 'number' }, - { Header: 'From', accessor: 'userAlias'}, + { Header: 'From', accessor: 'userAlias' }, { Header: 'Assigned To', accessor: 'assignedTo' }, { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, @@ -53,7 +54,7 @@ export default function ItemTable({ data, rowCanBeSelected }) { { Header: 'Department', accessor: 'department' }, { Header: 'Building', accessor: 'building' }, { Header: 'Date Received', accessor: 'dateReceived', sortInverted: true, Cell: ({ value }) => }, - + ], []); const tableInstance = useTable( { @@ -140,46 +141,48 @@ export default function ItemTable({ data, rowCanBeSelected }) { prepareRow(row); let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number return ( - { - history.push(`/${row.original.queue}/${row.original.number}`); - setSelectedRow({ queue: row.original.queue, number: row.original.number }); - }} - // This functionality should be achieved by using the selected prop and - // overriding the selected class but this applied the secondary color at 0.08% opacity. - // Overridding the root class is a workaround. - classes={{ - root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, - hover: classes.hoverBackgroundColor - }} - {...row.getRowProps()} - > - {row.cells.map(cell => ( - cell.render(_ => { - switch (cell.column.id) { - case "dateReceived": - return ( - - - - ); - case "lastUpdated": - return ( - - ); - default: - return ( - - {cell.value} - - ); - } - }) - ))}; + loading ? : + + { + history.push(`/${row.original.queue}/${row.original.number}`); + setSelectedRow({ queue: row.original.queue, number: row.original.number }); + }} + // This functionality should be achieved by using the selected prop and + // overriding the selected class but this applied the secondary color at 0.08% opacity. + // Overridding the root class is a workaround. + classes={{ + root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, + hover: classes.hoverBackgroundColor + }} + {...row.getRowProps()} + > + {row.cells.map(cell => ( + cell.render(_ => { + switch (cell.column.id) { + case "dateReceived": + return ( + + + + ); + case "lastUpdated": + return ( + + ); + default: + return ( + + {cell.value} + + ); + } + }) + ))}; ); })} From c343963d1416b670e4d2ebc3697bdb4145c0f6f2 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 22 Feb 2021 22:26:39 -0500 Subject: [PATCH 107/129] Refactored queue loading --- src/components/AppView/AppView.js | 54 +++++++++++++++++++------------ 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 1f5c459..8776f0d 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -12,47 +12,59 @@ import { useToken } from "../AuthProvider/"; import { useItem, useItemSetter } from "../ItemProvider/"; export default function AppView({ setDarkMode }){ - const activeItem = useItem(); - const setActiveItem = useItemSetter(); + // Create stateful variables. const [sidebarOpen, setSidebarOpen] = useState(false); const [queues, setQueues] = useState([]); const [items, setItems] = useState([]); const [selectedQueues, setSelectedQueues] = useState([]); const [queueSelectorOpen, setQueueSelectorOpen] = useState(false); + // Create contextual variables. + const activeItem = useItem(); + const setActiveItem = useItemSetter(); const access_token = useToken(); + // Get Queues from API. useEffect( _ => { - async function getQueues(){ + (async function getQueues(){ if (access_token === null){ - return undefined + return undefined; } if (queueSelectorOpen){ - return undefined + return undefined; } - if (selectedQueues.length > 0){ - let queuesToLoad = ""; - - for (let selectedQueue of selectedQueues){ - queuesToLoad += `+${selectedQueue.name}`; - } + if (selectedQueues.length === 0){ + setQueues([]) + return undefined; + } - let myHeaders = new Headers(); - myHeaders.append("Authorization", `Bearer ${access_token}`); - let requestOptions = { headers: myHeaders }; + let queuesToLoad = ""; - const apiResponse = await fetch(`/api/${queuesToLoad}`, requestOptions); - const queueJson = await apiResponse.json(); - setQueues(queueJson); - } else { - setQueues([]) + if (selectedQueues.length === 1){ + queuesToLoad = selectedQueues[0].name; } - } - getQueues(); + else if (selectedQueues.length > 0){ + selectedQueues.forEach( (queue, index) => ( + index === 0 + ? queuesToLoad += queue.name + : queuesToLoad += `+${queue.name}` + )); + } + + let myHeaders = new Headers(); + myHeaders.append("Authorization", `Bearer ${access_token}`); + let requestOptions = { headers: myHeaders }; + + const apiResponse = await fetch(`/api/${queuesToLoad}`, requestOptions); + const queueJson = await apiResponse.json(); + + setQueues(queueJson); + })(); }, [selectedQueues, access_token, queueSelectorOpen]); + // Populate items array. useEffect( _ => { let tempItems = []; for (let queue of queues){ From 5fcb7d724e3d094fec75138ef4e0d08f92d152b9 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 09:51:10 -0500 Subject: [PATCH 108/129] Implement loading UI --- src/components/AppView/AppView.js | 4 +- src/components/ItemTable/ItemTable.js | 152 ++++++++++-------- .../ItemTable/loading-annimation.gif | Bin 0 -> 22865 bytes 3 files changed, 85 insertions(+), 71 deletions(-) create mode 100644 src/components/ItemTable/loading-annimation.gif diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index d0e11b4..8536140 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -18,7 +18,7 @@ export default function AppView({ setDarkMode }){ const [items, setItems] = useState([]); const [selectedQueues, setSelectedQueues] = useState([]); const [queueSelectorOpen, setQueueSelectorOpen] = useState(false); - const [isLoading, setIsLoading] = useState(true); + const [isLoading, setIsLoading] = useState(false); // Create contextual variables. const activeItem = useItem(); @@ -41,6 +41,7 @@ export default function AppView({ setDarkMode }){ return undefined; } + setIsLoading(true); let queuesToLoad = ""; if (selectedQueues.length === 1){ @@ -62,6 +63,7 @@ export default function AppView({ setDarkMode }){ const queueJson = await apiResponse.json(); setQueues(queueJson); + setIsLoading(false) })(); }, [selectedQueues, access_token, queueSelectorOpen]); diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 0cc18b9..13e96a0 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -1,20 +1,25 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import { useTable, useFilters, useFlexLayout, useSortBy } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; +import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Box, Grid, ButtonGroup, IconButton, makeStyles, useTheme } from "@material-ui/core"; import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/" import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; import ItemTableCell from "../ItemTableCell"; import LastUpdatedCell from "../LastUpdatedCell/"; -import { Skeleton } from "@material-ui/lab"; +import jester from "./loading-annimation.gif"; export default function ItemTable({ data, rowCanBeSelected, loading }) { const [selectedRow, setSelectedRow] = useState({ queue: null, number: null }); const theme = useTheme(); const useStyles = makeStyles({ + loadingAnnimation: { + display: "flex", + justifyContent: "center", + width: "100%" + }, hoverBackgroundColor: { "&:hover": { // The !important is placed here to enforce CSS specificity. @@ -85,64 +90,69 @@ export default function ItemTable({ data, rowCanBeSelected, loading }) { const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = tableInstance; return ( - -
- - {headerGroups.map(headerGroup => ( - - {headerGroup.headers.map(column => ( - - - - - {column.render("Filter")} - - - - { - const isSortedAsc = column.isSorted && !column.isSortedDesc; - isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false) - })} - > - - - { - const isSortedDesc = column.isSorted && column.isSortedDesc; - isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true) - })} - > - - - + loading + ? ( + + Items are loading. + + ) + : ( + +
+ + {headerGroups.map(headerGroup => ( + + {headerGroup.headers.map(column => ( + + + + + {column.render("Filter")} + + + + { + const isSortedAsc = column.isSorted && !column.isSortedDesc; + isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false) + })} + > + + + { + const isSortedDesc = column.isSorted && column.isSortedDesc; + isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true) + })} + > + + + + - - - - ))} - - ))} - - - {rows.map((row) => { - prepareRow(row); - let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number - return ( - loading ? : - + + + ))} + + ))} + + + {rows.map((row) => { + prepareRow(row); + let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number + return ( { @@ -183,25 +193,27 @@ export default function ItemTable({ data, rowCanBeSelected, loading }) { } }) ))}; - - ); - })} - -
-
+ + ); + })} + + +
+ ) ); }; ItemTable.propTypes = { /** Array of items from all active queues to display in table. */ "items": PropTypes.array, - /** State variable indicating if rows can be selected. When false, all rows are deselected. */ - "rowCanBeSelected": PropTypes.bool + /** If true, rows can be selected. */ + "rowCanBeSelected": PropTypes.bool, + /** If true, ItemTable displays loading screen. */ + "loading": PropTypes.bool }; ItemTable.defaultProps = { - /** The items to display in the table. */ "items": [], - /** A state variable determining whether a row can be selected or not. */ - "rowCanBeSelected": true + "rowCanBeSelected": true, + "loading": false }; diff --git a/src/components/ItemTable/loading-annimation.gif b/src/components/ItemTable/loading-annimation.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6573088f06ff49ae5de60778c728592cf5715ae GIT binary patch literal 22865 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 M|E`cPa8LyQ13^0wdH?_b literal 0 HcmV?d00001 From ffeb3fe7e98ef58bf520105ef977709dc2ad560e Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 12:55:31 -0500 Subject: [PATCH 109/129] Remove feature placeholder --- src/components/ItemMetadataView/ItemMetadataView.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/components/ItemMetadataView/ItemMetadataView.js b/src/components/ItemMetadataView/ItemMetadataView.js index 05f6357..6c4e4aa 100644 --- a/src/components/ItemMetadataView/ItemMetadataView.js +++ b/src/components/ItemMetadataView/ItemMetadataView.js @@ -33,11 +33,6 @@ export default function ItemMetadataView({item}){ {item.subject} - - - Status, assignments, priority, refile, archive and delete controls coming soon to a theater near you. - - ); } From 25f0635c11fd78296bf9f6b6cb4c4f91a98a8294 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 13:03:52 -0500 Subject: [PATCH 110/129] Replace prop with context --- src/components/ItemView/ItemView.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index 8bd7eda..67da0f7 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -4,13 +4,18 @@ import { Paper, AppBar, Tab, makeStyles, useTheme } from '@material-ui/core'; // Import these tab components from @material-ui/lab instead of @material-ui/core for automatic a11y props // See: https://material-ui.com/components/tabs/#experimental-api import { TabContext, TabList, TabPanel } from '@material-ui/lab'; -import ItemMetadataView from "../ItemMetadataView/" +import ItemMetadataView from "../ItemMetadataView" import ItemBodyView from "../ItemBodyView"; import ItemHeaderView from "../ItemHeaderView"; +import { useItem } from "../ItemProvider"; -export default function ItemView({ activeItem }){ +export default function ItemView(){ + // Set stateful variables const [activeTab, setActiveTab] = useState('Conversation'); + // Set contextual variables + const activeItem = useItem(); + const theme = useTheme(); const useStyles = makeStyles({ "paperPadding": { @@ -51,6 +56,4 @@ export default function ItemView({ activeItem }){ }; ItemView.propTypes = { - /** The item to be viewed. */ - "activeItem": PropTypes.object.isRequired }; \ No newline at end of file From 75de4add0dbdf7fb35adc4098ca272e0caa53ad5 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 14:14:35 -0500 Subject: [PATCH 111/129] Remove debug logging --- src/components/ItemProvider/ItemProvider.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/components/ItemProvider/ItemProvider.js b/src/components/ItemProvider/ItemProvider.js index 3434aa0..b3d15e3 100644 --- a/src/components/ItemProvider/ItemProvider.js +++ b/src/components/ItemProvider/ItemProvider.js @@ -11,17 +11,9 @@ export const useItemSetter = () => useContext(ItemSetterContext); export default function ItemProvider({ children }) { const [item, setItem] = useState( {} ); - useEffect( _ => console.log("Current Item is: ", item)); - - const setItemWrapper = (newItem) => { - console.log("Old Item: ", item); - setItem(newItem); - console.log("Set new item."); - } - return ( - + {children} From d4961b52741d3e98381219c4b965a8c87b9e80f3 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 14:22:34 -0500 Subject: [PATCH 112/129] Remove hardcoded ID for uniqueness --- src/components/ItemTableFilter/ItemTableFilter.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/ItemTableFilter/ItemTableFilter.js b/src/components/ItemTableFilter/ItemTableFilter.js index c3ef252..2c61967 100644 --- a/src/components/ItemTableFilter/ItemTableFilter.js +++ b/src/components/ItemTableFilter/ItemTableFilter.js @@ -24,7 +24,6 @@ export default function ItemTableFilter({ label, onChange }) { > {label} From 0470bbea070ac468f10f9bf9a6a1f32a94c267da Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 16:11:24 -0500 Subject: [PATCH 113/129] Create timeline skeleton loader --- .../TimelineSkeleton/TimelineSkeleton.js | 31 +++++++++++++++++++ .../TimelineSkeleton/TimelineSkeleton.md | 17 ++++++++++ src/components/TimelineSkeleton/index.js | 1 + 3 files changed, 49 insertions(+) create mode 100644 src/components/TimelineSkeleton/TimelineSkeleton.js create mode 100644 src/components/TimelineSkeleton/TimelineSkeleton.md create mode 100644 src/components/TimelineSkeleton/index.js diff --git a/src/components/TimelineSkeleton/TimelineSkeleton.js b/src/components/TimelineSkeleton/TimelineSkeleton.js new file mode 100644 index 0000000..1dff555 --- /dev/null +++ b/src/components/TimelineSkeleton/TimelineSkeleton.js @@ -0,0 +1,31 @@ +import React from "react"; +import { Paper, Typography, makeStyles, useTheme } from '@material-ui/core'; +import { Skeleton } from '@material-ui/lab'; + +export default function TimelineSkeleton(){ + + const theme = useTheme(); + const useStyles = makeStyles({ + "Paper-root": { + overflow: "hidden" + }, + "padding": { + padding: theme.spacing(1) + } + + }); + const classes = useStyles(); + + return( + +
+ + + +
+
+ {[...Array(2).keys()].map( _ => )} +
+
+ ); +} \ No newline at end of file diff --git a/src/components/TimelineSkeleton/TimelineSkeleton.md b/src/components/TimelineSkeleton/TimelineSkeleton.md new file mode 100644 index 0000000..c13a7fe --- /dev/null +++ b/src/components/TimelineSkeleton/TimelineSkeleton.md @@ -0,0 +1,17 @@ +Renders a skeleton UI to indicate loading of a timeline item. + +```jsx +import { ThemeProvider } from "@material-ui/core/styles"; +import webqueue2Theme from "../../theme"; +import TimelineActionCard from "./TimelineSkeleton"; + +const theme = webqueue2Theme(false); + + + + +``` + +```jsx static + +``` \ No newline at end of file diff --git a/src/components/TimelineSkeleton/index.js b/src/components/TimelineSkeleton/index.js new file mode 100644 index 0000000..0d8e1b3 --- /dev/null +++ b/src/components/TimelineSkeleton/index.js @@ -0,0 +1 @@ +export { default } from "./TimelineSkeleton"; \ No newline at end of file From abf98dfc1a4b397778fbb2a844706c2776f9789b Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 23 Feb 2021 17:06:25 -0500 Subject: [PATCH 114/129] Add support for static files to react-styleguidist --- styleguidist/styleguide.config.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/styleguidist/styleguide.config.js b/styleguidist/styleguide.config.js index de44a92..12e4a94 100644 --- a/styleguidist/styleguide.config.js +++ b/styleguidist/styleguide.config.js @@ -6,6 +6,15 @@ const path = require('path') module.exports = { + + /** + * Static assets folder. Accessible as / in the style guide dev server. + * @type {string | array} + * @example "/" + * @default undefined + */ + assetsDir: "assetsDir", + /** * The title that appears at the top of the navigation bar. * @type {string} @@ -119,7 +128,7 @@ module.exports = { */ getComponentPathLine(componentPath) { const name = path.basename(componentPath, '.js') - return `import ${name} from './components/${name}/';` + return `import ${name} from '../components/${name}/';` }, /** From f1446674f5dd9f80b20b9f2398820b65b8da1014 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 1 Mar 2021 16:53:43 -0500 Subject: [PATCH 115/129] Add loading state and refactor props --- src/components/ItemBodyView/ItemBodyView.js | 95 +++++++++--------- src/components/ItemBodyView/ItemBodyView.md | 15 +-- src/components/ItemView/ItemView.js | 10 +- .../TimelineSkeleton/TimelineSkeleton.js | 5 +- .../assetsDir/ItemBodyView_Loaded.png | Bin 0 -> 71064 bytes .../assetsDir/ItemBodyView_Loading.gif | Bin 0 -> 165641 bytes 6 files changed, 66 insertions(+), 59 deletions(-) create mode 100644 styleguidist/assetsDir/ItemBodyView_Loaded.png create mode 100644 styleguidist/assetsDir/ItemBodyView_Loading.gif diff --git a/src/components/ItemBodyView/ItemBodyView.js b/src/components/ItemBodyView/ItemBodyView.js index eda0813..950f7ca 100644 --- a/src/components/ItemBodyView/ItemBodyView.js +++ b/src/components/ItemBodyView/ItemBodyView.js @@ -1,15 +1,15 @@ import React from "react"; import PropTypes from "prop-types"; -import { Timeline, TimelineItem, TimelineSeparator, TimelineConnector, TimelineContent, TimelineDot, Skeleton } from '@material-ui/lab'; +import { Timeline, TimelineItem, TimelineSeparator, TimelineConnector, TimelineContent, TimelineDot } from '@material-ui/lab'; import { makeStyles } from "@material-ui/core"; import DirectoryInformation from "../DirectoryInformation/"; import Assignment from "../Assignment/"; import TimelineActionCard from "../TimelineActionCard/"; import MessageView from "../MessageView/"; import ParseError from "../ParseError/"; -import { objectIsEmpty } from "../../utilities"; +import TimelineSkeleton from "../TimelineSkeleton/"; -export default function ItemBodyView({ item }) { +export default function ItemBodyView({ sections, loading }) { const useStyles = makeStyles(() => ({ "Timeline-root": { @@ -30,6 +30,11 @@ export default function ItemBodyView({ item }) { })); const classes = useStyles(); + /** + * Returns a section type specific timeline item. + * @param {Object} section The + * @returns {Node} A section type specific timeline item. + */ const generateTimelineItem = (section) => { switch (section.type) { case "directory_information": @@ -41,11 +46,11 @@ export default function ItemBodyView({ item }) { case "status": return case "assignment": - return + return case "reply_to_user": return case "reply_from_user": - return + return case "parse_error": return default: @@ -53,54 +58,48 @@ export default function ItemBodyView({ item }) { }; }; - const testing = true; + const TimelineItemTemplate = ({ children }) => ( + + + + + + + {children} + + + ); return ( - {/* Below is the original ternary operation for the map fucntion for future reference */} - {/* {objectIsEmpty(item) ? "" : item.content.map((section) */} - - {testing ? Object.keys(item).map((section) => ( - - - - - - - - - - )) - : item.content.map((section) => ( - - - - - - {item === undefined - ? - : generateTimelineItem(section) - } - - - ))} + { loading + ? ( // Generate 3 placeholders. + [...Array(3).keys()].map( (_, index) => ( + + + + )) + ) + : ( // Generate timeline. + sections.map((section) => ( + + {generateTimelineItem(section)} + + )) + ) + } ); }; ItemBodyView.propTypes = { - /** The item to diplay. */ - "item": PropTypes.object.isRequired -}; \ No newline at end of file + /** Section of an item to display. */ + "sections": PropTypes.array, + /** If true, shows loading placeholder. */ + "loading": PropTypes.bool +}; + +ItemBodyView.defaultProps = { + "sections": [], + "loading": false +} \ No newline at end of file diff --git a/src/components/ItemBodyView/ItemBodyView.md b/src/components/ItemBodyView/ItemBodyView.md index 6a741ea..f92f979 100644 --- a/src/components/ItemBodyView/ItemBodyView.md +++ b/src/components/ItemBodyView/ItemBodyView.md @@ -8,15 +8,16 @@ The ItemBodyView displays the seven actions possible in an item: - **Reply To User:** a message sent from an ECN employee to a user. - **Reply To ECN:** a message sent from the user to ECN that has been merged into an existing item. -```jsx -import ItemBodyView from "./ItemBodyView"; +## Default View +![ItemBodyView_Loaded](/ItemBodyView_Loaded.png) -const demoItem = {"queue": "ce", "number": 100, "lastUpdated": "09-28-20 01:26 PM", "headers": [{"type": "Merged-Time", "content": "Tue, 23 Jun 2020 13:31:53 -0400"}, {"type": "Merged-By", "content": "campb303"}, {"type": "QTime", "content": "1"}, {"type": "QTime-Updated-Time", "content": "Tue, 23 Jun 2020 13:28:50 EDT"}, {"type": "QTime-Updated-By", "content": "campb303"}, {"type": "Time", "content": "1"}, {"type": "Time-Updated-Time", "content": "Tue, 23 Jun 2020 13:28:50 EDT"}, {"type": "Time-Updated-By", "content": "campb303"}, {"type": "Replied-Time", "content": "Tue, 23 Jun 2020 13:28:48 -0400"}, {"type": "Replied-By", "content": "campb303"}, {"type": "Edited-Time", "content": "Tue, 23 Jun 2020 13:27:56 -0400"}, {"type": "Edited-By", "content": "campb303"}, {"type": "QAssigned-To", "content": "campb303"}, {"type": "QAssigned-To-Updated-Time", "content": "Tue, 23 Jun 2020 13:27:00 EDT"}, {"type": "QAssigned-To-Updated-By", "content": "campb303"}, {"type": "Assigned-To", "content": "campb303"}, {"type": "Assigned-To-Updated-Time", "content": "Tue, 23 Jun 2020 13:27:00 EDT"}, {"type": "Assigned-To-Updated-By", "content": "campb303"}, {"type": "QStatus", "content": "Dont Delete"}, {"type": "QStatus-Updated-Time", "content": "Tue, 23 Jun 2020 13:26:55 EDT"}, {"type": "QStatus-Updated-By", "content": "campb303"}, {"type": "Status", "content": "Dont Delete"}, {"type": "Status-Updated-Time", "content": "Tue, 23 Jun 2020 13:26:55 EDT"}, {"type": "Status-Updated-By", "content": "campb303"}, {"type": "Date", "content": "Tue, 23 Jun 2020 13:25:51 -0400"}, {"type": "From", "content": "Justin Campbell "}, {"type": "Message-ID", "content": "<911CE050-3240-4980-91DD-9C3EBB8DBCF8@purdue.edu>"}, {"type": "Subject", "content": "Beepboop"}, {"type": "To", "content": "cesite@ecn.purdue.edu"}, {"type": "Content-Type", "content": "text/plain; charset=\"utf-8\""}, {"type": "X-ECN-Queue-Original-Path", "content": "/home/pier/e/queue/Attachments/inbox/2020-06-23/208-original.txt"}, {"type": "X-ECN-Queue-Original-URL", "content": "https://engineering.purdue.edu/webqueue/Attachments/inbox/2020-06-23/208-original.txt"}], "content": [{"type": "directory_information", "Name": "Heyi Feng", "Login": "feng293", "Computer": "civil4147pc2.ecn", "Location": "HAMP 4147", "Email": "feng293@purdue.edu", "Phone": "5039154835", "Office": "", "UNIX Dir": "None", "Zero Dir": "U=\\\\myhome.itap.purdue.edu\\myhome\\%username%", "User ECNDB": "http://eng.purdue.edu/jump/2e29495", "Host ECNDB": "http://eng.purdue.edu/jump/2eccc3f", "Subject": "Upgrade system and Abaqus"}, {"type": "assignment", "datetime": "2020-06-23T13:27:00-0400", "by": "campb303", "to": "campb303"}, {"type": "initial_message", "datetime": "2020-06-23T13:25:51-0400", "from_name": "Justin Campbell", "user_email": "campb303@purdue.edu", "to": [{"name": "", "email": "cesite@ecn.purdue.edu"}], "cc": [], "content": ["Testtest\n"]}, {"type": "status", "datetime": "2020-06-23T13:26:55", "by": "campb303", "content": ["Dont Delete\n"]}, {"type": "edit", "datetime": "2020-06-23T13:27:56", "by": "campb303", "content": ["This be an edit my boy\n"]}, {"type": "reply_to_user", "datetime": "2020-06-23T13:28:18", "by": "campb303", "content": ["This be a reply my son\n", "\n", "Justin\n", "ECN\n"]}, {"type": "reply_from_user", "datetime": "2020-06-23T13:30:45-0400", "from_name": "Justin Campbell", "from_email": "campb303@purdue.edu", "cc": [], "content": ["X-ECN-Queue-Original-Path: /home/pier/e/queue/Attachments/inbox/2020-06-23/212-original.txt\n", "X-ECN-Queue-Original-URL: https://engineering.purdue.edu/webqueue/Attachments/inbox/2020-06-23/212-original.txt\n", "\n", "Huzzah!\n"]}], "isLocked": "ce 100 is locked by knewell using qvi", "userEmail": "campb303@purdue.edu", "userName": "Justin Campbell", "userAlias": "campb303", "assignedTo": "campb303", "subject": "Beepboop", "status": "Dont Delete", "priority": "", "department": "", "building": "", "dateReceived": "2020-06-23T13:25:51-0400"}; -
- -
+```jsx static + ``` +## Loading View +![ItemBodyView_Loaded](/ItemBodyView_Loading.gif) + ```jsx static - + ``` \ No newline at end of file diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index 67da0f7..f511fbf 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import PropTypes from "prop-types"; import { Paper, AppBar, Tab, makeStyles, useTheme } from '@material-ui/core'; // Import these tab components from @material-ui/lab instead of @material-ui/core for automatic a11y props @@ -7,14 +7,16 @@ import { TabContext, TabList, TabPanel } from '@material-ui/lab'; import ItemMetadataView from "../ItemMetadataView" import ItemBodyView from "../ItemBodyView"; import ItemHeaderView from "../ItemHeaderView"; -import { useItem } from "../ItemProvider"; +import { useItem, useItemSetter } from "../ItemProvider"; export default function ItemView(){ // Set stateful variables const [activeTab, setActiveTab] = useState('Conversation'); + const [isLoading, setIsLoading] = useState(false); // Set contextual variables const activeItem = useItem(); + const setActiveItem = useItemSetter(); const theme = useTheme(); const useStyles = makeStyles({ @@ -44,9 +46,11 @@ export default function ItemView(){ + - + + diff --git a/src/components/TimelineSkeleton/TimelineSkeleton.js b/src/components/TimelineSkeleton/TimelineSkeleton.js index 1dff555..6c2d15d 100644 --- a/src/components/TimelineSkeleton/TimelineSkeleton.js +++ b/src/components/TimelineSkeleton/TimelineSkeleton.js @@ -24,7 +24,10 @@ export default function TimelineSkeleton(){
- {[...Array(2).keys()].map( _ => )} + { + // Generate 2 placeholders. + [...Array(2).keys()].map( (_, index) => ) + }
); diff --git a/styleguidist/assetsDir/ItemBodyView_Loaded.png b/styleguidist/assetsDir/ItemBodyView_Loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..b99e9f56ea7b09c1463cb16536102fa2bd63fc64 GIT binary patch literal 71064 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 DGTJoZ literal 0 HcmV?d00001 diff --git a/styleguidist/assetsDir/ItemBodyView_Loading.gif b/styleguidist/assetsDir/ItemBodyView_Loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..33294137eb6b55a03cd8bd019adede6a9d138468 GIT binary patch literal 165641 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
-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

TNv4w!p%-g55nR2BRFQ6p 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 NJPWOb{Ez|({2yYN5*`2m literal 0 HcmV?d00001 From 2a7b674ea6187608103b5ab4dc000990e61cc130 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 2 Mar 2021 12:42:17 -0500 Subject: [PATCH 116/129] Fix validateDOM warning --- src/components/ItemTable/ItemTable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 13e96a0..d8a77cc 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -192,7 +192,7 @@ export default function ItemTable({ data, rowCanBeSelected, loading }) { ); } }) - ))}; + ))} ); })} From e534ef602623351ed178f803630dccaa92da4bb8 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 2 Mar 2021 14:14:45 -0500 Subject: [PATCH 117/129] Fix proptype specifications --- src/components/ItemTableCell/ItemTableCell.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/ItemTableCell/ItemTableCell.js b/src/components/ItemTableCell/ItemTableCell.js index cf13a74..38bacee 100644 --- a/src/components/ItemTableCell/ItemTableCell.js +++ b/src/components/ItemTableCell/ItemTableCell.js @@ -26,7 +26,11 @@ export default function ItemTableCell({ children, TableCellProps }) { ItemTableCell.propTypes = { /** Child object passed to display cell data. */ - "children": PropTypes.object, + "children": PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.element + ]), /** Props applied to the TableCell component. */ "TableCellProps": PropTypes.object }; From 6e7acf1e99a716710171cb629c83bf289027bcc0 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 2 Mar 2021 14:17:26 -0500 Subject: [PATCH 118/129] Fix validateDOM warning --- src/components/ItemTable/ItemTable.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index d8a77cc..424d55e 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -107,7 +107,6 @@ export default function ItemTable({ data, rowCanBeSelected, loading }) { {headerGroups.map(headerGroup => ( {headerGroup.headers.map(column => ( - @@ -143,7 +142,6 @@ export default function ItemTable({ data, rowCanBeSelected, loading }) { - ))} ))} From d0e56497292d300a4abbc2e91a2508cfa55eccdd Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 11 Mar 2021 21:25:01 -0500 Subject: [PATCH 119/129] Implement async item loading in ItemView --- src/components/AppView/AppView.js | 39 +++++++++-------------------- src/components/ItemView/ItemView.js | 39 ++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 8536140..abb7e67 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -9,7 +9,6 @@ import ItemViewAppBar from "../ItemViewAppBar/"; import ItemView from "../ItemView/"; import QueueSelector from "../QueueSelector/"; import { useToken } from "../AuthProvider/"; -import { useItem, useItemSetter } from "../ItemProvider/"; export default function AppView({ setDarkMode }){ // Create stateful variables. @@ -20,9 +19,6 @@ export default function AppView({ setDarkMode }){ const [queueSelectorOpen, setQueueSelectorOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); - // Create contextual variables. - const activeItem = useItem(); - const setActiveItem = useItemSetter(); const access_token = useToken(); // Get Queues from API. @@ -111,7 +107,6 @@ export default function AppView({ setDarkMode }){ return( - - {items.length === 0 ? null : { - const item = items.find((item) => { - return item.queue === match.params.queue && item.number === Number(match.params.number); - }); - - if (item === undefined) { - return ( - - ); - } - - setActiveItem(item); - - return ( - <> - - - - ); - } - } + render={({ match }) => ( + <> + + + + )} /> } diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index f511fbf..e2650bb 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -8,8 +8,9 @@ import ItemMetadataView from "../ItemMetadataView" import ItemBodyView from "../ItemBodyView"; import ItemHeaderView from "../ItemHeaderView"; import { useItem, useItemSetter } from "../ItemProvider"; +import { useToken } from "../AuthProvider/"; -export default function ItemView(){ +export default function ItemView({ queue, number }){ // Set stateful variables const [activeTab, setActiveTab] = useState('Conversation'); const [isLoading, setIsLoading] = useState(false); @@ -17,6 +18,38 @@ export default function ItemView(){ // Set contextual variables const activeItem = useItem(); const setActiveItem = useItemSetter(); + const access_token = useToken(); + + // Get full Item from API + useEffect( _ => { + (async _ => { + if (access_token === null){ + return undefined; + } + + if (activeItem.queue === queue && activeItem.number == number){ + return undefined; + } + + setIsLoading(true); + + let myHeaders = new Headers(); + myHeaders.append("Authorization", `Bearer ${access_token}`); + let requestOptions = { headers: myHeaders }; + + const apiResponse = await fetch(`/api/${queue}/${number}`, requestOptions); + + if (!apiResponse.ok){ + console.error(`Fetching item ${queue}${number}. Got code ${apiResponse.status} (${apiResponse.statusText})`); + return undefined; + } + + const itemJson = await apiResponse.json(); + + setActiveItem(itemJson); + setIsLoading(false) + })(); + }, [access_token, activeItem, setActiveItem, queue, number]); const theme = useTheme(); const useStyles = makeStyles({ @@ -60,4 +93,8 @@ export default function ItemView(){ }; ItemView.propTypes = { + /** The queue of the item to load. */ + "queue": PropTypes.string.isRequired, + /** The number of the item to load. */ + "number": PropTypes.number.isRequired }; \ No newline at end of file From 322a07530435c54378dbf7b88b631477dd44f3aa Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Thu, 11 Mar 2021 21:25:07 -0500 Subject: [PATCH 120/129] Update ItemView docs --- src/components/ItemView/ItemView.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/components/ItemView/ItemView.md b/src/components/ItemView/ItemView.md index a9e1ef0..61eee38 100644 --- a/src/components/ItemView/ItemView.md +++ b/src/components/ItemView/ItemView.md @@ -1,13 +1,5 @@ The ItemView is the primary view for an item. It displays the messages and actions in a timeline view. -```jsx -import React, { useState } from "react"; - -const demoItem = {"queue": "ce", "number": 100, "lastUpdated": "07-23-20 10:11 PM", "headers": [{"type": "Merged-Time", "content": "Tue, 23 Jun 2020 13:31:53 -0400"}, {"type": "Merged-By", "content": "campb303"}, {"type": "QTime", "content": "1"}, {"type": "QTime-Updated-Time", "content": "Tue, 23 Jun 2020 13:28:50 EDT"}, {"type": "QTime-Updated-By", "content": "campb303"}, {"type": "Time", "content": "1"}, {"type": "Time-Updated-Time", "content": "Tue, 23 Jun 2020 13:28:50 EDT"}, {"type": "Time-Updated-By", "content": "campb303"}, {"type": "Replied-Time", "content": "Tue, 23 Jun 2020 13:28:48 -0400"}, {"type": "Replied-By", "content": "campb303"}, {"type": "Edited-Time", "content": "Tue, 23 Jun 2020 13:27:56 -0400"}, {"type": "Edited-By", "content": "campb303"}, {"type": "QAssigned-To", "content": "campb303"}, {"type": "QAssigned-To-Updated-Time", "content": "Tue, 23 Jun 2020 13:27:00 EDT"}, {"type": "QAssigned-To-Updated-By", "content": "campb303"}, {"type": "Assigned-To", "content": "campb303"}, {"type": "Assigned-To-Updated-Time", "content": "Tue, 23 Jun 2020 13:27:00 EDT"}, {"type": "Assigned-To-Updated-By", "content": "campb303"}, {"type": "QStatus", "content": "Dont Delete"}, {"type": "QStatus-Updated-Time", "content": "Tue, 23 Jun 2020 13:26:55 EDT"}, {"type": "QStatus-Updated-By", "content": "campb303"}, {"type": "Status", "content": "Dont Delete"}, {"type": "Status-Updated-Time", "content": "Tue, 23 Jun 2020 13:26:55 EDT"}, {"type": "Status-Updated-By", "content": "campb303"}, {"type": "Date", "content": "Tue, 23 Jun 2020 13:25:51 -0400"}, {"type": "From", "content": "Justin Campbell "}, {"type": "Message-ID", "content": "<911CE050-3240-4980-91DD-9C3EBB8DBCF8@purdue.edu>"}, {"type": "Subject", "content": "Beepboop"}, {"type": "To", "content": "cesite@ecn.purdue.edu"}, {"type": "Content-Type", "content": "text/plain; charset=\"utf-8\""}, {"type": "X-ECN-Queue-Original-Path", "content": "/home/pier/e/queue/Attachments/inbox/2020-06-23/208-original.txt"}], "content": ["Testtest\n", "\n", "*** Status updated by: campb303 at: 6/23/2020 13:26:55 ***\n", "Dont Delete\n", "*** Edited by: campb303 at: 06/23/20 13:27:56 ***\n", "\n", "This be an edit my boy\n", "\n", "\n", "\n", "*** Replied by: campb303 at: 06/23/20 13:28:18 ***\n", "\n", "This be a reply my son\n", "\n", "Justin\n", "ECN\n", "\n", "=== Additional information supplied by user ===\n", "\n", "Subject: Re: Beepboop\n", "From: Justin Campbell \n", "Date: Tue, 23 Jun 2020 13:30:45 -0400\n", "X-ECN-Queue-Original-Path: /home/pier/e/queue/Attachments/inbox/2020-06-23/212-original.txt\n", "X-ECN-Queue-Original-URL: https://engineering.purdue.edu/webqueue/Attachments/inbox/2020-06-23/212-original.txt\n", "\n", "Huzzah!\n", "\n", "===============================================\n"], "isLocked": "ce 100 is locked by knewell using qvi", "userEmail": "campb303@purdue.edu", "userName": "Justin Campbell", "userAlias": "campb303", "assignedTo": "campb303", "subject": "Beepboop", "status": "Dont Delete", "priority": "", "department": "", "building": "", "dateReceived": "Tue, 23 Jun 2020 13:25:51 -0400"}; - - -``` - ```jsx static - + ``` \ No newline at end of file From 6afaf23e79925cfa387795fa4985b2931bac8285 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 12 Mar 2021 17:24:03 -0500 Subject: [PATCH 121/129] Add error page to ItemView --- src/components/ItemView/ItemView.js | 77 +++++++++++++++++++---------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index e2650bb..0bedad7 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -1,19 +1,22 @@ import React, { useState, useEffect } from 'react'; import PropTypes from "prop-types"; -import { Paper, AppBar, Tab, makeStyles, useTheme } from '@material-ui/core'; +import { Paper, AppBar, Tab, makeStyles, useTheme, Box, Typography } from '@material-ui/core'; // Import these tab components from @material-ui/lab instead of @material-ui/core for automatic a11y props // See: https://material-ui.com/components/tabs/#experimental-api import { TabContext, TabList, TabPanel } from '@material-ui/lab'; +import SadFaceIcon from '@material-ui/icons/SentimentVeryDissatisfied'; import ItemMetadataView from "../ItemMetadataView" import ItemBodyView from "../ItemBodyView"; import ItemHeaderView from "../ItemHeaderView"; import { useItem, useItemSetter } from "../ItemProvider"; import { useToken } from "../AuthProvider/"; -export default function ItemView({ queue, number }){ +export default function ItemView() { + let { queue, number } = {queue: "test", number: 1}; // Set stateful variables const [activeTab, setActiveTab] = useState('Conversation'); const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(false); // Set contextual variables const activeItem = useItem(); @@ -21,13 +24,13 @@ export default function ItemView({ queue, number }){ const access_token = useToken(); // Get full Item from API - useEffect( _ => { + useEffect(_ => { (async _ => { - if (access_token === null){ + if (access_token === null) { return undefined; } - if (activeItem.queue === queue && activeItem.number == number){ + if (activeItem.queue === queue && activeItem.number == number) { return undefined; } @@ -39,8 +42,9 @@ export default function ItemView({ queue, number }){ const apiResponse = await fetch(`/api/${queue}/${number}`, requestOptions); - if (!apiResponse.ok){ + if (!apiResponse.ok) { console.error(`Fetching item ${queue}${number}. Got code ${apiResponse.status} (${apiResponse.statusText})`); + setError(true); return undefined; } @@ -61,6 +65,13 @@ export default function ItemView({ queue, number }){ }, "tabPanelPadding": { padding: `${theme.spacing(2)}px ${theme.spacing(2)}px` + }, + errorContainer: { + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "center", + marginTop: theme.spacing(6) } }); const classes = useStyles(); @@ -69,25 +80,41 @@ export default function ItemView({ queue, number }){ setActiveTab(newValue); }; - return( - - - - - - - - - - - - - - - - - - + return ( + + {error ? ( + + + 4☹4 + + + Something went wrong. + + + {`Item ${queue}${number} could not be found.`} + + + ) : ( + <> + + + + + + + + + + + + + + + + + + + )} ); }; From ebbafcb5d2e1d5c7a9120c006d3a0ab9e337fe6c Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 12 Mar 2021 17:24:31 -0500 Subject: [PATCH 122/129] Remove unused icon --- src/components/ItemView/ItemView.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index 0bedad7..ce6e65e 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -4,7 +4,6 @@ import { Paper, AppBar, Tab, makeStyles, useTheme, Box, Typography } from '@mate // Import these tab components from @material-ui/lab instead of @material-ui/core for automatic a11y props // See: https://material-ui.com/components/tabs/#experimental-api import { TabContext, TabList, TabPanel } from '@material-ui/lab'; -import SadFaceIcon from '@material-ui/icons/SentimentVeryDissatisfied'; import ItemMetadataView from "../ItemMetadataView" import ItemBodyView from "../ItemBodyView"; import ItemHeaderView from "../ItemHeaderView"; From 8faa51980e7b6cd42aa82c3139642638d5887588 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 12 Mar 2021 17:38:30 -0500 Subject: [PATCH 123/129] FIx hard coded item values --- src/components/ItemView/ItemView.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index ce6e65e..24ad9c6 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -10,8 +10,7 @@ import ItemHeaderView from "../ItemHeaderView"; import { useItem, useItemSetter } from "../ItemProvider"; import { useToken } from "../AuthProvider/"; -export default function ItemView() { - let { queue, number } = {queue: "test", number: 1}; +export default function ItemView({ queue, number }) { // Set stateful variables const [activeTab, setActiveTab] = useState('Conversation'); const [isLoading, setIsLoading] = useState(false); From 9e9e48aaa5427a2079e8a5f45ab23e6f117e5bfe Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Fri, 12 Mar 2021 19:19:35 -0500 Subject: [PATCH 124/129] Reformat --- src/components/ItemTable/ItemTable.js | 221 +++++++++++++------------- 1 file changed, 110 insertions(+), 111 deletions(-) diff --git a/src/components/ItemTable/ItemTable.js b/src/components/ItemTable/ItemTable.js index 7e789e2..235e9c0 100644 --- a/src/components/ItemTable/ItemTable.js +++ b/src/components/ItemTable/ItemTable.js @@ -6,7 +6,6 @@ import { useHistory } from "react-router-dom"; import RelativeTime from "react-relative-time"; import ItemTableFilter from "../ItemTableFilter/"; import ItemtTableSortButtons from "../ItemTableSortButtons/"; -import { ArrowDownward, ArrowUpward } from "@material-ui/icons"; import ItemTableCell from "../ItemTableCell"; import LastUpdatedCell from "../LastUpdatedCell/"; import jester from "./loading-annimation.gif"; @@ -98,119 +97,119 @@ export default function ItemTable({ data, rowCanBeSelected, loading }) { return ( loading ? ( - - Items are loading. - - ) : ( - - - - {headerGroups.map(headerGroup => ( - - {headerGroup.headers.map(column => { - // Determine sort directions - const isSortedAsc = column.isSorted && !column.isSortedDesc; - const isSortedDesc = column.isSorted && column.isSortedDesc; + + Items are loading. + + ) : ( + +
+ + {headerGroups.map(headerGroup => ( + + {headerGroup.headers.map(column => { + // Determine sort directions + const isSortedAsc = column.isSorted && !column.isSortedDesc; + const isSortedDesc = column.isSorted && column.isSortedDesc; - return ( - - - - - {column.render("Filter")} - - - (isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false)) - }} - sortDescArrowProps={{ - ...column.getSortByToggleProps(), - onClick: _ => (isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true)) - }} - sortDirection={(_ => { - if (isSortedAsc) { - return 'asc'; - } - else if (isSortedDesc) { - return 'desc'; - } - else { - return undefined; - } - })()} - /> - + return ( + + + + + {column.render("Filter")} - - - ); - })} - - ))} - + + (isSortedAsc ? column.clearSortBy() : column.toggleSortBy(false)) + }} + sortDescArrowProps={{ + ...column.getSortByToggleProps(), + onClick: _ => (isSortedDesc ? column.clearSortBy() : column.toggleSortBy(true)) + }} + sortDirection={(_ => { + if (isSortedAsc) { + return 'asc'; + } + else if (isSortedDesc) { + return 'desc'; + } + else { + return undefined; + } + })()} + /> + + + + + ); + })} + + ))} + - - {rows.map((row) => { - prepareRow(row); - let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number - return ( - { - history.push(`/${row.original.queue}/${row.original.number}`); - setSelectedRow({ queue: row.original.queue, number: row.original.number }); - }} - // This functionality should be achieved by using the selected prop and - // overriding the selected class but this applied the secondary color at 0.08% opacity. - // Overridding the root class is a workaround. - classes={{ - root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, - hover: classes.hoverBackgroundColor - }} - {...row.getRowProps()} - > - {row.cells.map(cell => ( - cell.render(_ => { - switch (cell.column.id) { - case "dateReceived": - return ( - - - - ); - case "lastUpdated": - return ( - - ); - default: - return ( - - {cell.value} - - ); - } - }) - ))} - - ); - })} - -
-
- ) + + {rows.map((row) => { + prepareRow(row); + let isSelected = selectedRow.queue === row.original.queue && selectedRow.number === row.original.number + return ( + { + history.push(`/${row.original.queue}/${row.original.number}`); + setSelectedRow({ queue: row.original.queue, number: row.original.number }); + }} + // This functionality should be achieved by using the selected prop and + // overriding the selected class but this applied the secondary color at 0.08% opacity. + // Overridding the root class is a workaround. + classes={{ + root: (isSelected && rowCanBeSelected) ? classes.rowSelected : classes.bandedRows, + hover: classes.hoverBackgroundColor + }} + {...row.getRowProps()} + > + {row.cells.map(cell => ( + cell.render(_ => { + switch (cell.column.id) { + case "dateReceived": + return ( + + + + ); + case "lastUpdated": + return ( + + ); + default: + return ( + + {cell.value} + + ); + } + }) + ))} + + ); + })} + + + + ) ); } From dfbc04833e458da639da58ba5e27ff74b2af9352 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Sun, 14 Mar 2021 16:39:54 -0400 Subject: [PATCH 125/129] Correct API paths --- package.json | 2 +- src/components/AppView/AppView.js | 2 +- src/components/ItemView/ItemView.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1934448..1c5c645 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webqueue2", - "homepage": "/webqueue/q2", + "homepage": "", "proxy": "http://localhost:5000/", "version": "0.1.0", "private": true, diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 828ffe1..bbd8cd2 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -55,7 +55,7 @@ export default function AppView({ setDarkMode }){ myHeaders.append("Authorization", `Bearer ${access_token}`); let requestOptions = { headers: myHeaders }; - const apiResponse = await fetch(`/api/${queuesToLoad}`, requestOptions); + const apiResponse = await fetch(`${process.env.PUBLIC_URL}/api/data/${queuesToLoad}`, requestOptions); const queueJson = await apiResponse.json(); setQueues(queueJson); diff --git a/src/components/ItemView/ItemView.js b/src/components/ItemView/ItemView.js index 24ad9c6..1b774ac 100644 --- a/src/components/ItemView/ItemView.js +++ b/src/components/ItemView/ItemView.js @@ -38,7 +38,7 @@ export default function ItemView({ queue, number }) { myHeaders.append("Authorization", `Bearer ${access_token}`); let requestOptions = { headers: myHeaders }; - const apiResponse = await fetch(`/api/${queue}/${number}`, requestOptions); + const apiResponse = await fetch(`${process.env.PUBLIC_URL}/api/data/${queue}/${number}`, requestOptions); if (!apiResponse.ok) { console.error(`Fetching item ${queue}${number}. Got code ${apiResponse.status} (${apiResponse.statusText})`); From 5e8f703ce1b75f285b62d2e2b2cd93b8c433c646 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 15 Mar 2021 00:07:34 -0400 Subject: [PATCH 126/129] Fix incorrect item count when getting queue counts --- api/ECNQueue.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/api/ECNQueue.py b/api/ECNQueue.py index 96e1078..f5888a1 100644 --- a/api/ECNQueue.py +++ b/api/ECNQueue.py @@ -1356,7 +1356,7 @@ def getQueueCounts() -> list: queueInfo = [] for queue in getValidQueues(): possibleItems = os.listdir(queueDirectory + "/" + queue) - validItems = [isValidItemName for file in possibleItems] + validItems = [file for file in possibleItems if isValidItemName(file)] queueInfo.append( {"name": queue, "number_of_items": len(validItems)} ) # Sorts list of queue info alphabetically @@ -1384,4 +1384,9 @@ def loadAllQueues(headersOnly: bool = True) -> list: for queue in getValidQueues(): queues.append(Queue(queue, headersOnly=headersOnly)) - return queues \ No newline at end of file + return queues + +if __name__ == "__main__": + abe = Queue("abe") + abeCount = getQueueCounts() + print() \ No newline at end of file From 3d553f665d575dee6afcc31664fb9b8ea3d4f58e Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 16 Mar 2021 01:49:07 -0400 Subject: [PATCH 127/129] Set version --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 1c5c645..2a7a20a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "webqueue2", "homepage": "", "proxy": "http://localhost:5000/", - "version": "0.1.0", + "version": "0.9.1", "private": true, "dependencies": { "@material-ui/core": "^4.10.2", @@ -14,7 +14,6 @@ "clsx": "^1.1.1", "history": "^5.0.0", "jwt-decode": "^3.1.2", - "material-table": "^1.63.1", "react": "^16.13.1", "react-cookie": "^4.0.3", "react-dom": "^16.13.1", From d30db8840bd7d46ad5a5cb007365da48edd7a34f Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 16 Mar 2021 01:52:09 -0400 Subject: [PATCH 128/129] Add htaccess and maintenance page --- public/.htaccess | 17 +++++++++ public/index-maintenance.html | 67 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 public/.htaccess create mode 100644 public/index-maintenance.html diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..43e0c37 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,17 @@ +# Enable the rewrite module +RewriteEngine On + +# Reverse proxy all requests to the API to the API CGI script +# See mod_rewrite docs: https://httpd.apache.org/docs/current/mod/mod_rewrite.html +RewriteRule ^api/(.*)$ http://localhost:5000/api/$1 [P] + +# Defer requests that are not files to client side routing +# See: https://create-react-app.dev/docs/deployment/#serving-apps-with-client-side-routing +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule ^ index.html [QSA,L] + +# Uncomment the following line to serve a maintenance message. +#DirectoryIndex index-maintenance.html + +# Diable Auth +Satisfy any \ No newline at end of file diff --git a/public/index-maintenance.html b/public/index-maintenance.html new file mode 100644 index 0000000..9f35883 --- /dev/null +++ b/public/index-maintenance.html @@ -0,0 +1,67 @@ + + + + + + + + webqueue2 + + + + +

+
+

Under Maintenance

+
+

webqueue2 is having some work done. Please check back later.

+

Mar 14 2021 @ 11:30 PM EDT

+
+
+ + + \ No newline at end of file From f033e3ef14de0c05dd857b8189a1152cf4fc73e6 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Tue, 16 Mar 2021 02:19:59 -0400 Subject: [PATCH 129/129] Replace pypi python-ldap with self hosted version --- api/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/requirements.txt b/api/requirements.txt index fcd08ee..48ec2fb 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -15,8 +15,8 @@ Flask-JWT-Extended # Prevent upgrade to PyJWT 2.x until Flask-JWT-Extended is updated to support it. # Check: https://github.com/vimalloc/flask-jwt-extended/tags PyJWT == 1.* -# Specify pyldap version for custom build. This is not installed by pip. -pyldap == 3.3.1 +# Custom python-ldap without SASL +git+https://github.itap.purdue.edu/ECN/python-ldap.git@python-ldap-3.3.1#egg=python-ldap==3.3.1 easyad # API Documentation