From ebf938c48cc8f8f15cb62226c240620a102c6e8c Mon Sep 17 00:00:00 2001 From: Rory Healy Date: Sat, 8 Jun 2024 21:22:26 +1000 Subject: [PATCH] Initial commit. Note - this is the original assignment submission. No modifications have been made. --- part1.py | 217 +++++++ part2.py | 180 ++++++ part3.py | 350 +++++++++++ project03 | 197 ++++++ project03-rubric.pdf | Bin 0 -> 52411 bytes project03-sample-solutions.py | 1076 +++++++++++++++++++++++++++++++++ project03.pdf | Bin 0 -> 84492 bytes 7 files changed, 2020 insertions(+) create mode 100644 part1.py create mode 100644 part2.py create mode 100644 part3.py create mode 100644 project03 create mode 100755 project03-rubric.pdf create mode 100644 project03-sample-solutions.py create mode 100755 project03.pdf diff --git a/part1.py b/part1.py new file mode 100644 index 0000000..0e73155 --- /dev/null +++ b/part1.py @@ -0,0 +1,217 @@ +# Title: Project 3 - Group scoring +# Author: Rory Healy +# Date created - 17th May 2019 +# Date modified - 30th May 2019 + +def is_n_of_a_kind(cards): + '''Takes a list of cards and returns a Boolean value based on if those + cards are said to be "N-of-a-kind".''' + + # Analyse the numbers of the cards to determine validity. + numbers_of_cards = [] + for i in range(len(cards)): + numbers_of_cards.append(cards[i][:-1]) + if numbers_are_same(numbers_of_cards): + return True + return False + +def numbers_are_same(numbers): + '''Takes a list of strings, "numbers", and returns True if all the numbers + in the list of strings are the same, and False otherwise.''' + original_number = numbers[0] + for i in range(len(numbers)): + if numbers[i] != original_number: + return False + return True + +def is_run(cards): + '''Determines if a set of cards are said to be a "valid run" and returns a + corresponding Boolean value.''' + + # Extracts the suits of all the cards in the list. + suits_of_cards = [] + colour_of_cards = '' + red_cards = 'DH' + for i in range(len(cards)): + suits_of_cards.append(cards[i][-1]) + for card in suits_of_cards: + if card in red_cards: + colour_of_cards += 'R' + else: + colour_of_cards += 'B' + + # Extracts the numbers of the cards in the list. + numbers_of_cards = [] + for i in range(len(cards)): + numbers_of_cards.append(cards[i][:-1]) + + # Return True/False based on the validity of the suits and numbers. + if suits_are_alternating(colour_of_cards) and \ + numbers_are_monotonic(numbers_of_cards): + return True + return False + +def suits_are_alternating(suits): + '''Takes a string "suits" and returns True if the suits of the string are + alternating, and False otherwise.''' + for i in range(1, len(suits)): + if suits[i] == suits[i - 1]: + return False + return True + +def numbers_are_monotonic(numbers): + '''Takes a list of strings of numbers and returns True if the numbers in + the list are monotonic (i.e. strictly increasing or strictly decreasing), + where aces can represent any number.''' + + # Replaces Aces with their numerical value, based on the values of the + # cards adjacent to the Ace. + for i in range(len(numbers)): + if numbers[i] == 'A': + if (i == 0) or (i == (len(numbers) - 1)): + return False + + # The value the a is actually taking depends on whether the cards + # are increasing or decreasing in value, so this step is necessary + # for dealing with Aces. + if int(numbers[0]) < int(numbers[-1]): + a_actually_is = int(numbers[i - 1]) + 1 + elif int(numbers[0]) > int(numbers[-1]): + a_actually_is = int(numbers[i + 1]) + 1 + elif int(numbers[0]) == int(numbers[-1]): + return False + + # Validating that the ace represents the correct number. + a_should_represent = (int(numbers[i + 1]) + int(numbers[i - 1])) \ + /2 + if a_should_represent != a_actually_is: + return False + else: + numbers.insert(i, str(a_actually_is)) + numbers.remove('A') + + # Checks if the numbers are consecutive. + for i in range(len(numbers)): + if int(numbers[0]) == int(numbers[-1]): + return False + + # For runs that are ascending. + elif int(numbers[0]) < int(numbers[-1]): + if i == 0: + if int(numbers[0]) != (int(numbers[1]) - 1): + return False + + elif i == (len(numbers) - 1): + if int(numbers[i]) != (int(numbers[i - 1]) + 1): + return False + + elif int(numbers[i]) != (int(numbers[i - 1]) + 1): + return False + + # For runs that are descending. + elif int(numbers[0]) > int(numbers[-1]): + if i == 0: + if int(numbers[0]) != (int(numbers[1]) + 1): + return False + + elif i == (len(numbers) - 1): + if int(numbers[i]) != (int(numbers[i - 1]) - 1): + return False + + elif int(numbers[i]) != (int(numbers[i - 1]) - 1): + return False + + # If the run passes all of these cases, then it must be a valid run. + return True + +def convert_0jqk(cards): + '''Takes a list of cards and converts special numbers (0, J, Q, K) to + their respective values (10, 11, 12, 13) respectively.''' + + # Replaces letters with numbers. + for i in range(len(cards)): + # Replaces Kings with their numerical value - 13. + if cards[i][0] == 'K': + suit = cards[i][1] + cards[i] = '13' + suit + + # Replaces Queens with their numerical value - 12. + elif cards[i][0] == 'Q': + suit = cards[i][1] + cards[i] = '12' + suit + + # Replaces Jacks with their numerical value - 11. + elif cards[i][0] == 'J': + suit = cards[i][1] + cards[i] = '11' + suit + + # Replaces '0', representing 10, with its numerical value. + elif cards[i][0] == '0': + suit = cards[i][1] + cards[i] = '10' + suit + return cards + +def factorial(num): + '''Calculates the factorial of the number and returns it.''' + if num == 1: + return 1 + else: + return num * factorial(num - 1) + +def order_a_list(cards): + '''Orders a list of cards based their numerical value with Aces last.''' + ordered_list = [] + numbers_of_cards = [] + aces = [] + for i in range(len(cards)): + if cards[i][:-1] == 'A': + aces.append('A') + else: + numbers_of_cards.append(cards[i][:-1]) + + numbers_of_cards.sort(key=int) + numbers_of_cards += aces + for number in numbers_of_cards: + for card in cards: + if number == card[:-1]: + if card in ordered_list: + continue + ordered_list.append(number + card[-1]) + return ordered_list + +def comp10001go_score_group(cards): + '''Takes a list of cards (each a 2-element string, where the first letter + is the card value and the second letter is the card suit), and returns the + calculated score of that set of cards as an integer.''' + + score = 0 + cards = convert_0jqk(cards) + cards = order_a_list(cards) + + # Given a list, identifies an n-of-a-kind case or a run. + if len(cards) > 1: + for i in range(2, len(cards) + 1): + # Handles the case where all of the cards are n-of-a-kind. + if is_n_of_a_kind(cards): + score += int(cards[0][:-1]) * factorial(len(cards)) + return score + + # Handles the case where only some of the cards are n-of-a-kind + # and the rest aren't. + elif not is_n_of_a_kind(cards[0:i]): + score += int(cards[0][:-1]) * factorial(i - 1) + value = int(cards[0][:-1]) + for j in range(i): + if int(cards[0][:-1]) == value: + cards.pop(0) + + # Any leftover cards have their values taken from the total score. + if len(cards) > 0: + for card in cards: + value = card[:-1] + if value == 'A': + value = 20 + else: + value = int(value) + score -= value + return score diff --git a/part2.py b/part2.py new file mode 100644 index 0000000..764a0a4 --- /dev/null +++ b/part2.py @@ -0,0 +1,180 @@ +# Title: Project 3 - Group validation +# Author: Rory Healy +# Date created - 23rd May 2019 +# Date modified - 30th May 2019 + +def is_n_of_a_kind(cards): + '''Takes a list of cards and returns a Boolean value based on if those + cards are said to be "N-of-a-kind".''' + + # Analyse the numbers of the cards to determine validity. + numbers_of_cards = [] + for i in range(len(cards)): + numbers_of_cards.append(cards[i][:-1]) + if numbers_are_same(numbers_of_cards): + return True + return False + +def numbers_are_same(numbers): + '''Takes a list of strings, "numbers", and returns True if all the numbers + in the list of strings are the same, and False otherwise.''' + original_number = numbers[0] + for i in range(len(numbers)): + if numbers[i] != original_number: + return False + return True + +def is_run(cards, aces): + '''Takes two lists of cards (represented as strings), cards and aces, and + returns a list of the lists of runs that are possible with all the given + cards.''' + + return_list = [] + possible_runs = [] + original_cards_len = len(cards) + for i in range(1, len(cards)): + current_card = cards[0] + current_run = [] + if len(possible_runs) > 0: + # This is to prevent any IndexErrors due to the use of a while + # loop within a for loop. + for run in possible_runs: + if len(run) + len(cards) != original_cards_len: + break + else: + continue + break + n = 1 + while n < len(cards): + if len(cards) == 1: + break + # This will check that the cards form a run. + elif int(current_card[:-1]) == int(cards[i][:-1]) - n: + current_run.append(cards[i]) + cards.remove(cards[i]) + n += 1 + if len(current_run) > 0: + current_run.append(current_card) + possible_runs.append(current_run) + cards.remove(current_card) + + # Numerically sorts the runs. + for i in range(len(possible_runs)): + current_run = order_a_list(possible_runs[i]) + possible_runs.pop(i) + possible_runs.insert(i, current_run) + + # Inserts any aces where necessary. + for run in possible_runs: + for i in range(len(run)): + if i == len(run): + break + elif int(run[i][:-1]) != (int(run[i + 1][:-1]) - 1): + if len(aces) > 0: + run.insert(i + 1, aces[0]) + aces.pop(0) + break + else: + for card in run: + cards.append(card) + possible_runs.remove(run) + break + + # Checks for alternating suits. + for run in possible_runs: + if not suits_are_alternating(run): + for card in run: + cards.append(card) + run.remove(card) + + # Returns all the runs and leftover cards. + return_list.append(possible_runs) + return_list.append(cards) + return_list.append(aces) + return return_list + +def suits_are_alternating(suits): + '''Takes a string "suits" and returns True if the suits of the string are + alternating, and False otherwise.''' + for i in range(1, len(suits)): + if suits[i] == suits[i - 1]: + return False + return True + +def convert_0jqk(cards): + '''Takes a list of cards and converts special numbers (0, J, Q, K) to + their respective values (10, 11, 12, 13) respectively.''' + + # Replaces letters with numbers. + for i in range(len(cards)): + # Replaces Kings with their numerical value - 13. + if cards[i][0] == 'K': + suit = cards[i][1] + cards[i] = '13' + suit + + # Replaces Queens with their numerical value - 12. + elif cards[i][0] == 'Q': + suit = cards[i][1] + cards[i] = '12' + suit + + # Replaces Jacks with their numerical value - 11. + elif cards[i][0] == 'J': + suit = cards[i][1] + cards[i] = '11' + suit + + # Replaces '0', representing 10, with its numerical value. + elif cards[i][0] == '0': + suit = cards[i][1] + cards[i] = '10' + suit + return cards + +def order_a_list(cards): + '''Orders a list of cards based their numerical value with Aces last.''' + ordered_list = [] + numbers_of_cards = [] + aces = [] + for i in range(len(cards)): + if cards[i][:-1] == 'A': + aces.append('A') + else: + numbers_of_cards.append(cards[i][:-1]) + + numbers_of_cards.sort(key=int) + numbers_of_cards += aces + for number in numbers_of_cards: + for card in cards: + if number == card[:-1]: + if card in ordered_list: + continue + ordered_list.append(number + card[-1]) + return ordered_list + +def comp10001go_valid_groups(groups): + '''Takes a list of lists of cards (stored as strings) and returns True or + False depending on if it matches the conditions of valiidty as specified + in the rules.''' + + # Handles empty lists. + if not groups: + return True + + for group in groups: + + # Converts all cards in the group to actual numbers (excluding aces) + group = convert_0jqk(group) + group = order_a_list(group) + + # Checks if the group is either an n-of-a-kind or a run + if not is_n_of_a_kind(group): + return False + + elif len(group) == 1: + aces = [] + for card in group: + if card[0] == 'A': + aces.append(card) + group.remove(card) + runs = is_run(group, aces) + if len(runs[0]) == 0 and len(group) != 1: + return False + return True diff --git a/part3.py b/part3.py new file mode 100644 index 0000000..9507ac1 --- /dev/null +++ b/part3.py @@ -0,0 +1,350 @@ +# Title: Project 3 - Group validation +# Author: Rory Healy +# Date created - 27th May 2019 +# Date modified - 30th May 2019 + +def convert_0jqk(cards): + '''Takes a list of cards and converts special numbers (0, J, Q, K) to + their respective values (10, 11, 12, 13) respectively.''' + + # Replaces letters with numbers. + for i in range(len(cards)): + # Replaces Kings with their numerical value - 13. + if cards[i][0] == 'K': + suit = cards[i][1] + cards[i] = '13' + suit + + # Replaces Queens with their numerical value - 12. + elif cards[i][0] == 'Q': + suit = cards[i][1] + cards[i] = '12' + suit + + # Replaces Jacks with their numerical value - 11. + elif cards[i][0] == 'J': + suit = cards[i][1] + cards[i] = '11' + suit + + # Replaces '0', representing 10, with its numerical value. + elif cards[i][0] == '0': + suit = cards[i][1] + cards[i] = '10' + suit + return cards + +def convert_10111213(cards): + '''Takes a list of cards and converts values (such as 10, 11, 12 and 13) to + their respective card representation (0, J, Q, K).''' + + for i in range(len(cards)): + # Replaces 13 with its value - K. + if cards[i][:-1] == '13': + suit = cards[i][-1] + cards[i] = 'K' + suit + + # Replaces 12 with its value - Q. + elif cards[i][:-1] == '12': + suit = cards[i][-1] + cards[i] = 'Q' + suit + + # Replaces 11 with its value - J. + elif cards[i][:-1] == '11': + suit = cards[i][-1] + cards[i] = 'J' + suit + + # Replaces 10 with its value - 0. + elif cards[i][:-1] == '10': + suit = cards[i][-1] + cards[i] = '0' + suit + return cards + +def suits_are_alternating(suits): + '''Takes a list of cards and returns True if the suits of the cards are + alternating, and False otherwise.''' + for i in range(1, len(suits)): + if suits[i][1] == suits[i - 1][1]: + return False + return True + +def order_a_list(cards): + '''Orders a list of cards based their numerical value with Aces last.''' + ordered_list = [] + numbers_of_cards = [] + aces = [] + for i in range(len(cards)): + if cards[i][:-1] == 'A': + aces.append('A') + else: + numbers_of_cards.append(cards[i][:-1]) + + numbers_of_cards.sort(key=int) + numbers_of_cards += aces + for number in numbers_of_cards: + for card in cards: + if number == card[:-1]: + if card in ordered_list: + continue + ordered_list.append(number + card[-1]) + return ordered_list + +def comp10001go_play(discard_history, player_no, hand): + '''Takes a list of lists, "discard_history", of the previous cards played + by each of the 4 players, an integer "player_no", and a list of cards held + by the player "hand".''' + + # Handles the case where there is only 1 card left. + if len(hand) == 1: + return hand[0] + + # Copies the hand to a list that can be changed without affecting the hand. + hhand = [] + for card in hand: + hhand.append(card) + + # Sorts the hand by numerical order, and also sorts the discard pile for + # the current player by numerical order. + hhand = convert_0jqk(hhand) + hhand = order_a_list(hhand) + + current_discard = [] + for turn in discard_history: + current_discard.append(turn[player_no]) + current_discard = convert_0jqk(current_discard) + current_discard = order_a_list(current_discard) + + # Extracts the numbers and suits from the discarded pile. + discarded_numbers = [] + discarded_suits = [] + red_cards = 'DH' + + for card in current_discard: + discarded_numbers.append(card[:-1]) + discarded_suits.append(card[-1]) + + discarded_colours = '' + for card in discarded_suits: + if card in red_cards: + discarded_colours += 'R' + else: + discarded_colours += 'B' + + # Preferences n-of-a-kind scoring to maximise points by returning the card + # that gives the highest scoring n-of-a-kind. + potential_return_cards = [] + for i in range(len(hhand)): + current_card_number = hhand[i][:-1] + for number in discarded_numbers: + if current_card_number == number and number != 'A': + potential_return_cards.append(hand[i]) + + # A frequency list of the values of the cards in the discard pile is + # created, then sorted by the frequency. The card with the highest + # frequency is always preferred over the card with the highest value due to + # the growth of x!. + freq_dict = {} + for number in discarded_numbers: + if number not in freq_dict.keys(): + freq_dict[number] = 1 + else: + freq_dict[number] += 1 + + # Generates a list of tuple of items where the values and keys are swapped. + dict_items = [] + for item in freq_dict.items(): + key, value = item + dict_items.append((value, key)) + + # Sorts the tuples by frequency then flips the tuples again. + dict_items = sorted(dict_items, reverse=True) + sorted_items = [] + for item in dict_items: + value, key = item + sorted_items.append((key, value)) + + # Selects the card with the highest frequency from the list of potential + # cards that could be returned. + for item in sorted_items: + key, value = item + for card in potential_return_cards: + if key == card: + return card + + # If there aren't any cards that fit in a run, this returns the lowest + # valued card to minimise the points subtracted from singleton cards. + hand_numbers = [] + for i in range(len(hhand)): + if hhand[i][:-1] == 'A': + continue + hand_numbers.append(int(hhand[i][:-1])) + + for i in range(len(hand)): + if hhand[i][:-1] == 'A': + continue + elif int(hhand[i][:-1]) == min(hand_numbers): + return hand[i] + +def is_run(cards, aces): + '''Takes two lists of cards (represented as strings), cards and aces, and + returns a list of the lists of runs that are possible with all the given + cards.''' + + return_list = [] + possible_runs = [] + original_cards_len = len(cards) + for i in range(1, len(cards)): + current_card = cards[0] + current_run = [] + if len(possible_runs) > 0: + # This is to prevent any IndexErrors due to the use of a while + # loop within a for loop. + for run in possible_runs: + if len(run) + len(cards) != original_cards_len: + break + else: + continue + break + n = 1 + while n < len(cards): + if len(cards) == 1: + break + # This will check that the cards form a run. + elif int(current_card[:-1]) == int(cards[i][:-1]) - n: + current_run.append(cards[i]) + cards.remove(cards[i]) + n += 1 + if len(current_run) > 0: + current_run.append(current_card) + possible_runs.append(current_run) + cards.remove(current_card) + + # Numerically sorts the runs. + for i in range(len(possible_runs)): + current_run = order_a_list(possible_runs[i]) + possible_runs.pop(i) + possible_runs.insert(i, current_run) + + # Inserts any aces where necessary. + for run in possible_runs: + for i in range(len(run)): + if i == len(run) - 1: + break + elif int(run[i][:-1]) != (int(run[i + 1][:-1]) - 1): + if len(aces) > 0: + run.insert(i + 1, aces[0]) + aces.pop(0) + break + else: + for card in run: + cards.append(card) + possible_runs.remove(run) + break + + # Checks for alternating suits. + for run in possible_runs: + if not suits_are_alternating(run): + for a_card in run: + card = a_card + cards.append(a_card) + possible_runs.remove(run) + + # Returns all the runs and leftover cards. + return_list.append(possible_runs) + return_list.append(cards) + return_list.append(aces) + return return_list + +def comp10001go_group(discard_history, player_no): + '''Takes a list of the lists of cards played by each player each turn, + "discard_history", and an integer "player_no", and returns a list of lists + of cards based on the discard history of the player that could be used in + scoring.''' + + # Extracts the cards that the player has discarded, and orders them into a# + # list. + discarded_cards = [] + discarded_numbers = [] + + for turn in discard_history: + discarded_cards.append(turn[player_no]) + discarded_cards = convert_0jqk(discarded_cards) + discarded_cards = order_a_list(discarded_cards) + + for card in discarded_cards: + number = card[:-1] + discarded_numbers.append(number) + + # Identifies n-of-a-kind cards. + freq_dict = {} + for number in discarded_numbers: + if number not in freq_dict.keys(): + freq_dict[number] = 1 + else: + freq_dict[number] += 1 + + # Generates a list of tuple of items where the values and keys are swapped. + dict_items = [] + for item in freq_dict.items(): + key, value = item + dict_items.append((value, key)) + + # Sorts the tuples by frequency then flips the tuples again. + dict_items = sorted(dict_items, reverse=True) + sorted_items = [] + for item in dict_items: + value, key = item + sorted_items.append([key, value]) + + # Using "sorted_items", we then need to identify cards who's number occurs + # more than once and removes them from "discarded_cards" and add them to a + # list to be returned. + return_list = [] + n_of_a_kind_list = [] + for cards in sorted_items: + if cards[1] > 1: + for card in discarded_cards: + if card[0] == 'A': + continue + elif int(card[:-1]) == int(cards[0]): + n_of_a_kind_card = card + n_of_a_kind_list.append(n_of_a_kind_card) + for card in n_of_a_kind_list: + for cards in discarded_cards: + if card == cards: + discarded_cards.remove(cards) + if len(n_of_a_kind_list) > 1: + return_list.append(n_of_a_kind_list) + + # Using the cards leftover from the previous check, we need to identify + # runs in the list of discarded cards. To do this, the aces are extracted + # and stored as a seperate list, then the first list is checked to see if a + # run is able to be made and if so, then it is added to the returned list. + ace_list = [] + for card in discarded_cards: + if card[0] == 'A': + ace_list.append(card) + for card in ace_list: + for discard in discarded_cards: + if discard == card: + discarded_cards.remove(card) + + runs = is_run(discarded_cards, ace_list) + if len(runs[0]) > 0: + for run in runs[0]: + for card in run: + for discard in discarded_cards: + if discard == card: + discarded_cards.remove(card) + return_list.append(run) + + # Checks for singletons and adds them to a list to be added to the return + # list. + if len(discarded_cards) > 0: + for card in discarded_cards: + return_list.append([card]) + if len(runs[2]) > 0: + for card in runs[2]: + return_list.append([card]) + + for lst in return_list: + tmp = convert_10111213(lst) + return_list.insert(return_list.index(lst), tmp) + return_list.remove(lst) + return return_list diff --git a/project03 b/project03 new file mode 100644 index 0000000..98f69d9 --- /dev/null +++ b/project03 @@ -0,0 +1,197 @@ +-------------------------------------------------------------------------------- +Part 1 - Valid table + +Write a function comp10001huxxy_valid_table() which takes a single argument: + +- groups, a list of lists of cards (each a 2-element string, where the first + letter is the card value and the second letter is the card suit, e.g. '3H' for + the 3 of Hearts), where each list of cards represents a single group on the + table, and the combined list of lists represents the combined groups played to + the table. + +Your function should return a bool, which evaluates whether the table state is +valid or not. Recall from the rules of the game that the table is valid if all +groups are valid, where a group can take one of the following two forms: + +- an N-of-a-kind (i.e. three or more cards of the same value), noting that in + the case of a 3-of-a-kind, each card must have a unique suit (e.g. ['2S', + '2S', '2C'] is not a valid 3-of-a-kind, as the Two of Spades has been played + twice), and if there are 4 or more cards, all suits must be present. +- a run (i.e. a group of 3 or more cards, starting from the lowest-valued card, + and ending with the highest-valued card, forming a continuous sequence in + terms of value, and alternating in colour; note that the specific ordering of + cards in the list is not significant, i.e. ['2C', '3D', '4S'] and ['4S', '2C', + '3D'] both make up the same run. + +Example function calls are as follows: + + >>> comp10001huxxy_valid_table([]) + True + >>> comp10001huxxy_valid_table([['AC']]) + False + >>> # run too short + >>> comp10001huxxy_valid_table([['AC', '2S']]) + False + >>> # run doesn't alternate in colour + >>> comp10001huxxy_valid_table([['AC', '2S', '3H']]) + False + >>> # values not adjacent + >>> comp10001huxxy_valid_table([['AC', '2S', '4H']]) + False + >>> comp10001huxxy_valid_table([['AC', '2H', '3S']]) + True + >>> # test unsorted run + >>> comp10001huxxy_valid_table([['3C', 'AS', '2H']]) + True + >>> comp10001huxxy_valid_table([['0C', 'JH', 'QS', 'KH', '9D']]) + True + >>> # n-of-kind too short + >>> comp10001huxxy_valid_table([['2C', '2H']]) + False + >>> # same suit twice for 3-of-kind + >>> comp10001huxxy_valid_table([['2C', '2H', '2C']]) + False + >>> # same suit twice for 4-of-kind + >>> comp10001huxxy_valid_table([['2C', '2H', '2S', '2C']]) + False + >>> comp10001huxxy_valid_table([['2C', '2H', '2S']]) + True + >>> comp10001huxxy_valid_table([['2C', '2H', '2S', '2D']]) + True + >>> comp10001huxxy_valid_table([['2C', '2H', '2S', '2D', '2S']]) + True + >>> comp10001huxxy_valid_table([['2C', '2H', '2S', '2D', '2S'], + ['0D', '9C', '8H']]) + True + +-------------------------------------------------------------------------------- +Part 2 - Group validation + +Write a function comp10001go_valid_groups() which takes a single argument: + +- groups, a list of groups, each of which is a list of cards (following the same + definition as Part 1) + +Your function should return a Boolean indicating whether all groups are valid or +not (i.e. a singleton card, a valid N-of-a-kind or a valid run). Note that the +function may be used to validate a grouping of partial discards or the full set +of discards, i.e. the total number of cards in groups will be between 0 and 10. + +Example function calls are as follows: + + >>> comp10001go_valid_groups([['KC', 'KH', 'KS', 'KD'], ['2C']]) + True + >>> comp10001go_valid_groups([['KC', 'KH', 'KS', 'AD'], ['2C']]) + False + >>> comp10001go_valid_groups([['KC', 'KH', 'KS', 'KD'], ['2C', '3H']]) + False + >>> comp10001go_valid_groups([]) + True + +-------------------------------------------------------------------------------- +Part 3 - Play and Group! + +The third question requires that you implement the two functions that are called +in the tournament: (1) comp10001_play, which is used to select a discard over +the 10 turns of a game; and (2) comp10001_group, which is used to group the +discards into groups for scoring. We combine these together into a single +question in Grok as a means of validating that you have a complete player that +is qualified to enter the tournament. Note that in each case, we provide only a +single test case (and no hidden test cases) for two reasons: (1) there are very +few game states where there is a single possible option to either play a discard +or group the discards, and testing relies on there only being one possible +output; and (2) the real testing occurs in simulation mode in the actual +tournament, in the form of random games against other players. On validation of +implementations of each of the two functions, you will be given the option to +submit your player to the tournament. + +First, write a function comp10001go_play() which takes three arguments: + +- discard_history, a list of lists of four cards, each representing the discards + from each of the four players in preceding turns (up to 9 turns) in sequence + of player number (i.e. the first element in each list of four cards is for + Player 0, the second is for Player 1, etc.). Note that the list is sequenced + based on the turns, i.e. the first list of four cards corresponds to the first + turn, and the last list of four cards corresponds to the last turn. +- player_no, an integer between 0 and 3 inclusive, indicating which player is + being asked to play. player_no can also be used to determine the discards for + that player from discard_history by indexing within each list of four cards. +- hand, a list of cards held by the player. + +Your function should return a single card to discard from hand. + +An example function call is as follows: + + >>> comp10001go_play([['0S', 'KH', 'AC', '3C'], ['JH', 'AD', 'QS', '5H'], + ['9C', '8S', 'QH', '9S'], ['8C', '9D', '0D', 'JS'], + ['5C', 'AH', '5S', '4C'], ['8H', '2D', '6C', '2C'], + ['8D', '4D', 'JD', 'AS'], ['0H', '6S', '2H', 'KC'], + ['KS', 'KD', '7S', '6H']], 3, ['QC']) + 'QC' + +Second, write a function comp10001go_group() which takes two arguments: + +- discard_history, a list of lists of four cards, each representing the discards + from each of the four players in preceding turns in sequence of player number + (i.e., the first element in each list of four cards is for Player 0, the + second is for Player 1, etc.). Note that the list is sequenced based on the + turns, i.e. the first list of four cards corresponds to the first turn, and + the last list of four cards corresponds to the last turn. Additionally note + that the number of turns contained in discard_history will always be 10. +- player_no, an integer between 0 and 3 inclusive, indicating which player is + being asked to play. player_no can also be used to determine the discards for + that player from discard_history by indexing within each list of four cards. + +Your function should return a list of lists of cards based on the discard +history of player_no, to use in scoring the player. Note that the grouping of +cards represented by the output must be valid (i.e. each list of cards must be a +singleton card, or a valid N-of-a-kind or run), but that the ordering of cards +within groups, and the ordering of groups is not significant. + +An example function call is as follows: + + >>> comp10001go_group([['0S', 'KH', 'AC', '3C'], ['JH', 'AD', 'QS', '5H'], + ['9C', '8S', 'QH', '9S'], ['8C', '9D', '0D', 'JS'], + ['5C', 'AH', '5S', '4C'], ['8H', '2D', '6C', '2C'], + ['8D', '4D', 'JD', 'AS'], ['0H', '6S', '2H', 'KC'], + ['KS', 'KD', '7S', '6H'], ['JC', 'QD', '4H', 'QC']], 3) + [['3C'], ['5H'], ['9S'], ['JS'], ['4C'], + ['2C'], ['AS'], ['KC'], ['6H'], ['QC']] + +-------------------------------------------------------------------------------- +Part 4 - Optimal grouping + +The final question is for bonus marks, and is deliberately quite a bit harder +than the four basic questions (and the number of marks on offer is, as always, +deliberately not commensurate with the amount of effort required). Only attempt +this is you have completed the earlier questions, and are up for a challenge! + +Write a function comp10001go_best_partitions() which takes a single argument: + +- cards, a list of up to 10 cards + +Your function should return a list of list of lists of cards, representing the +groupings of cards that score the most points from cards. Note that the ordering +of the groupings is not significant, and neither is the ordering of the groups +within a grouping, nor the order of cards within a group. + +One area of particular focus with this question is efficiency: there are strict +time limits associated with running your code over each example, that you must +work within, or you will fail the test. Good luck! + +Example function calls are as follows: + + >>> comp10001go_best_partitions(['0H', '8S', '6H', 'AC', '0S', + 'JS', '8C', '7C', '6D', 'QS']) + [[['AC'], ['0H', '0S'], ['JS'], ['8S', '8C'], ['7C'], ['6H', '6D'], ['QS']]] + >>> comp10001go_best_partitions(['9D', '2S', '4D', '4H', '6D', + 'AH', '2C', 'JH', '3C', '9H']) + [[['4D', '4H'], ['6D'], ['AH'], ['2S', '2C'], + ['JH'], ['3C'], ['9D', '9H']]] + >>> comp10001go_best_partitions(['3C', '5H', '9S', 'JS', '4C', + '2C', 'AS', 'KC', '6H', 'QC']) + [[['3C'], ['5H'], ['9S'], ['JS'], ['4C'], ['2C'], ['AS'], ['KC'], ['6H'], ['QC']]] + >>> comp10001go_best_partitions(['0D', 'AS', '5C', '8H', + 'KS', 'AH', 'QH', 'AC']) + [[['AS', '5C', '8H', 'AH'], ['0D', 'KS', 'QH', 'AC']], + [['0D', 'AS', 'KS', 'QH'], ['5C', '8H', 'AH', 'AC']]] diff --git a/project03-rubric.pdf b/project03-rubric.pdf new file mode 100755 index 0000000000000000000000000000000000000000..4b1f087c125a60647d393bcd2f50cb1852f23fd0 GIT binary patch literal 52411 zcma%=Q>-vRw^)yD+qP}nwr$%szGK_AZQHhO^>2G`(xiRpJnhLOJDJJelQpwQ6-2~n z8R=M|NavSF)}fdQ7zpf*te|*!py*{x?aW;)2$&ezSqc8vfT9<(v~e+YBA^$uF?2B% zF*UX~F@@segK~CpGBvb?^4MI_ns7SeKk z8f~-@l_U}?q3ZtQOD>VHNr8yua<4-YMT8&dlkveMIDbr8FafXba`yE#R<-3XnX6%h zsy=aaCL%E?TS$vwDDuc5=ZF2HbvotAHC5;D|NU|K`*7*64r5;mDIG&Jy*aEv5Vl2< zrTg>BEj#+YHwQ^Nn0XxkIjK3AE+7y(wsd@OIm8y$rJyZVt}w=MZzb4_>W#n=hQ$Lm zBu@%(c(2lZQ%q*FhXrE;PS`&$izh{^2UydJ>Cp5L7 z`__iN@T-BsC*@|`afKV*yrZ$Z=5WV8x)@XIDZ^Zd?~O+sAhFAPn$ktoVJL)Hj|2}u z`L_DgulMm~X~ckmvP=eCm|<}@7qt!t`xu#!;fkRfm?Yao}C>B zj%XnWc?$cfpd-T_gG633dD}tC20P9@T2xjs(QK~HYdj$ag2yoi+Kz=0$X-Z?@>uS$&{3!Yz2FY3&!0l=>ETA1Z!YcPnax&G zgNEGlB$#~1;Pmcy*=HN4dJ}@0kA3f`St_fjQA;mtfvQSP_B`e9-0&r=W0YwqvQvzlz~QM@IrC1Q4BL%T>~O5NGR}K^8rRN_JQ;363U)f~9GVC8GY<5)IU_lCvgdni>M}0g@73EH?R* z7M&Lu&D#@0oEk=_Bq+Xz|?l=U`6j2qn$#!wukjIOgiVqdC_H6(>wp%HKx-&N+_ zkfe~6+FA>vq>xl}FFwM)uiLXE5!nAM2r-AGgh^Br`sx?4HFdt9ssJq+saQd}!*v^KTRuIL4?smEPKj&h4A)K?*E;DLlY>XvsuIVQB6lrqNp^_|&7(2TDxL%01Z3NI$qYEGlzoTS%IL!#ek)uuy{KAY0 z0#P<4C6D~ji6DRjq9 zFg3h9|LyifjJWlVmCwA z3BGOC+Er2zG9g`kED%RsvdPbIcy14vK=H+@dsYtYUj_f(GB$=^Wqj5T>`WiO?RCid z)`xo6 z>^cqP>4goG|EAh+9i`sAWo8;T>7X5My|21j%#(UJ(}>!>lgw$M<~Mi&JbK_dhZI<3 zeUyXS=^=oTMYth@Y85lKcPu7q3q4d(&VOzP0}y9g9eN^#d6h2q>)$z=Jh{YI1fWhO z*+RN4;}R`)tJB>eQN(;2u)mDO9VCR{1-bv!d^$jNB+5I?CtpqDnZ4nvy)?aKx=Ofo zo!v0fiS(!@J~thiYxavV!{&b)8blkPaHrntsYkMjo-Xz!!~eXijUBx_Zc?w1)qT;{ zqsy~?VuoWmUuJ?)*@>sy@rGAl# zy*9HN-mi|ktJ<@UTHYo$?&v_qzCz+b!0NDoqW4gc03`rZU1MoN0ssgUL;#@Bhm8%{ zd5iK$YvB{5SwzzyLHLII+VfYT|8Q-h8=P3YVNddq5omyMTn^VvfB#hk!!tbzrE* zaA21k#aRP(7tsV>7=su9!2yar|Kj~5N3nwK5)jayo*vNaodh5VcydlVz5sTV6Bq^{ z;sHE81M&X4L_n`syM6v5$o(c@ne2k`KAceqh{>&8U>E^x0|f+(IFWFVLEHg602kMQ zhEh0zJzSVS=;|l*0Qh@zX8<7}p+BiN@=tXlif{LNUWgC}=eF=Kp#!=9oB|lwdDR6( zzK?5eLgQtq`=sg_lB_HE1X6D-RcdXRa6*&_j8EA;G6iScOW1Iyu3sHpFh`c#~?Zq5QmT;MF8+RB-GfSyIV6R%!hR>pFey#d_Pn~ zX&wT=`_)q&w>8TU4x&T)UEe`pyoSQe;NY@M@Y~$@pA!`&p%1|C_h1r$pCluJfP{nu z3;`V-6vVeV9R-zF-%esCIn3+U+za~t-@{gypkc2+g2ky<;XKv6XnqU8 zpM5#!JN?CF5N<)P-QUfM$VSmhK7_jvbEf`zFTnk;z8i%S>?N=pOF*H(tbfBPeb)tj z&p^IIJs=R|&r67)IAGx4iEuQ`ag<*a!NT(Q4Nwv5^IT`81H#}#+IooS2*4{I-fQps zd6QV32;i@fg(_E&uU|4I0R@0~{yZVTb4(xr#31nB+5iw>kexz1`C}UDAAW{lE*_pm z#!o3g=k?yzUM5(uZ$H8J2q%aH*Y=62$CzmjQ4jlH8DsWJOKm#I)USmi%Gfuvzd7!< z&C7+jlv^At3$Z*b8WmC5DbTqm9Q~LtUhf2~=EOXOfMNNoJq7L)I-D=J?-7WZlgK=$ zYy^Mo1_7@Wn+Zv4(_rhN3~OFj9Ks#qhSx*Kdnt6si+~gSJ{Scrx#2{<_z3l>`;8%A zgNdQGFswEoi6p^O{p2&t0!vQ&fDe#tyTWBe(a&j@VM+q)_rcKCcHnOr5xMAQPm2+2 z;&C&IpBBvrF=cS`zljblS_v39(go*}sAm$jO{6x7I8++$hm<>JQQ*2Ha8aJD?B{>N zx0n2Qwy!n<5wjDgZ`Iih>vpHtKr&ZpQrNeqx5srM>o+{Kp)aN6mMnL;4 zF0_BkIfDOE^ffLG=vc=N_~4KmK6oUZEz$FGXh>{w=%AA^zTb5urvXNf`G6SpJ5wdW z6P6m1u`P@)8rrKpA#e76|4kzHd9xJ`<);UpW+r+2TmWbGDE zc>Tq#MvJJzD%WzwUACOaPswLNFj0?IQrw^I0F z6h_mvVAro)vRe*4pJRkF=Xwz#G<7BR_Fx>_HtZI;o&NMbBqTuv#HKqC2q_yCi?F8& zFXCkpY|)B^-c^HQ=KUHeRXpJ60uEp-NB2S|tmzd|Z!{ZtEn`V-+m+n;`R+{L1$Oo3 z2+CQ{!8`k@AXSs!Z%qjve~a=%d)Kw~MMd0y4vuxcEP?e1A?WAoreD%AV;fbM za#nahNuB4F1F!T*qs*IQd`@dGnsojGV(au_fp0|lDpH2( z7rW$0ed?<&9HYw=DX~tYPIy_b7GY_m&8U<4AyT%&DF>$!VCB<#HlN;iBwJ)W_ zQ0)Q&Z7D5xv(yh%+l)WzO_R~PF5@iTJD&jQMudF$$QwoBLT#|)v9ZqE1iV|vtH%&t z5JA9=(O7ds!GpZ@?2^c7ptkzz8(6IvuF+@iJhpUUcJVx% zsRERm+rANGa|8kJPn_P|Yd4fLWAs=-zn*)K;#~9T;MiywOI5s--lD+e$o;dq1UAG0 zrmy%+A}u4C>e4X|-J5ON7^t3{qQSo~fW_#lC}>9;!90qOa*of-%22GpkUa1eLWnKp za#ads!hZ{gueEED{lRgiFIldR80C089rvx);hYWMZ;_?HL|qEC^Q~gr+RVv^v1+TI zXzSZb%ReO^;OTG}KowGA#+4jF`nMeadf7lb#JGuRn;^pkwr+rlQ;*T9zwMbU;=gc8 z=(g}6)>(WYIO_J+U%CdATudEEZwaKDEEZMQ#ga2Q{|!d468b7Y;jVPKPO;tjDI6D^ z*V)KJ?QH?@E*!}|<>ot@uJJ7qnK;04%{p9q&YJbcwO;xRvNxdakqgxJKzCN5rd ztlRba)wFc#b30wv9{=chmL{0md+}pjCk5qXcaXew88^DK{y@#L4>U3DV0X?r=R|%< zK1Z!EdLleB9QTNSNlVc%(J@FfMD$6g^D>=9qmN%sJ8nY_%4Txi&PMZgSc`@0KszJ1 z4nbd^48Vw5XaBl0sBbtNi+tA)v^|KxZ2v}myM*OuRaOm2|2#tsFCnY*Xhg<+=$oyg z)4!Znx(OoX@#cg`E$VJyuUCJXooEH$f)MCh12`L}!=hlf{jkWrZKR40O+v9l&NECq z-e!kHrBW>Cg_|~tU9URUvSG&dWy-47(~U)jR|#9dUUskjKvB<|@KZZ`Ij8CAPqHY4 zt}wYGyOgDe?QxnQqV_9o~dpdB+wTN?QFJ-oLXPzioJ)8GOhQ>P`53cglY z`A~?xTf0ElOl4Qv(sLm)(0Mt=Y6n%rAS2|HaMURpg9ygR6Fb+xA2qBbVTm5rcBO;@ zyHpZ}(8i(XN%W7^uknrIAMAMhJ#leE<(drMrmPs+k$Wd8<2?SnF45Wh(#RSKH(znv z#I)`G(-P~ZxM`8xST(O4S)Ue?K@|KjMx*8 zc(d{Jwp*m{Slt`%u|c&-HJBq&;(FbU?fEm|E^nIncvv=tiUA!PmwmT+U9P|w&FRC& zR^D2gT?h)pm!puiTa+*0s!~_6I%+FDjCMYZpi9j9fea(C04BK2ZD-fh&Vj>r=oggpMj3CAIefvyScuhUHi~2 zI-hXSOQY>TVR~)3I7rC_^!1e&T>!5$ed!+6iyotK`Xuj)djaL`ZHpC;>WTi9I#W*^ z&$Bts*umj_*GTb_2EqhGuGXh7bVZ%6wo@?fh7yl4HCGJ6bc4sF-UJHV7Ye$io|yln zdVe|hcCvI7rCg8eCQlb3+9q%Ml-W$SUo^a&I4WjZ`&~c$9QiHVbf!yj;;R`c?Nv-2 zlI0C<&h>h^z?6NpRD4MSljogwsJBM1LUp>BF6gm=$@b6(nH5?ucm`AKj;{#-p`y}Bfx<&} zT@whUIA)8iJUWI%5QrPd%H+jG_@-EZC?-YGcFU`V44@jA{eK?dxVG$xg7?h#r`cIw z69sB0g^C5We!RrTWj7DChb{>c8=ZtFa&1V-8ym*0#*!_aMChbe;d0D7uy0TQ8e7?&Us0#3##g!Ud$Kw32+j0-dzf7NAlXwXD>*D570yEe zLr!;cE|q&ZkA8s~nquR&VCHzDrmBFa-e#=a5C-WpZIywnhZRzQsI7?su|#lh?xE+xNJ+S8+KcmavBm$;&`wBC|9$~W52pX8@vL_LsoEqLJM z)DCIHIpbx4jtrR2SS0|1J#tPni%cm5%v`(s-Y-Pamr!;DaX036Mx=IG5ENw{nq&@) z_2t@pi)B(Tqixa6G7QHS*JNjvdT?Gwi(0laoJ7)pPK@hxtFb5c%ZSjNv_kzJ zqp83L8okmG+qiJ|Lt-9&;)B=snbv&<>7W3v6wC%FADXJMGDeN(O8IjO<63~REL=6{~mmM)mVl9$DG zt(1}0TlvjUC6zl5ypO}~9Q@HbEXm)U-zBG}-Oi3e+H-6)1V_Zl%dy^^^862u3pzbb z5N({G{eqGT@?xEN5r>oO5ZsDRX7MuuvRhX0itB37bw78HHp^R#^&jhs$tjI57)&Nn zL7WKGeK%(bw53$LSDNtT<5bk+s}+=`V4}YS;B9mF9h6a^_O@TvZSN9g{Vp zRTfPVZf2RLjq0Dy!K@gb7fo;e9ZOSl^XX4@^By1UN@|mf95^ZGi%E$u;=)D=FcmJs zFLTnbrr?`3cR3rcIpiIEkGGi4lF=U4=ABq|O;TERR#k1q?JXn7y<7B07j?M33wgdI zN8pJy%>tVQw?zh)`7@z57Wo$5E)x7f();VliWXcXm%Ui&%hJPY=v&5%i#@8j%4oX< zj!c{cs_I;vc_@f`ecI%RS(2;kOt72iq-K6gIx=*j>%*7am{GRzQOg}#O0f2Nw3<~6 zoD=-pZ2pxpp6^@XwwWIvb)w2jje!5d%+mVkf`LsLL1yOid_&gRt0=QY0i(XQYOE9T z1_S?B=rD^u2ffmQ4wH?Icg3pJVq^`sbt?u=eT18(@KGZpd~36lm@y#{-38ZS>W=?Y zRZYcGHnQQ^^cpxrH-8QX=SXp@G(Yrcu;|Kbs4kKCLpi7{twTZ|Vbb<6Y;D{2MI+(8 zvCXgUZYC#>juWM-tK22N(Mqu{t{GDWxX%cmu*wVf50=MtD8) zvP}KCoIb>nP5(8mR6lRm%fqcffnhiwIj93&%_3ovFir^3IM=)KOVXNqN1rPv$~?*L z;n-})GNISYK09~eXob_s=STI!G1#X~ZJl}mg;kAFIgl%V8x8Ih^Um9LD8qq(_Uc|{ z<=?g5IQsGIq+mL{(3F>LZ<6WqmzK<5u)u!ux54tRL;}TyW8%iAgeb5*tEHs0>&%t4 z*uy%QvWdlObVn56UXA>aZ$ sN-be+9jUcRVjxrNnw#qq@w&02hb%_R;Td;UYWl_ z-L_7`xPPa#hDLPJ)r)1yR4A4zT5AIo!8em4$e&Y!F|XZ@eFUeK9CATlf(-hN7zx4~ zPr>PXT%s!aiwT*K{OHN9c{hG`fwnKM5bH6tNL>kVMr1rO-X+*c;Awj?T7Trr;~8Qi z_Az|pEwiOKx2U1|vpxEoiVb2i_3%liN*SOT=gpkv26!{@HB1XIKU&WY$Ae1bv}`OP z6we7n??rL~N_z&icgu;uSqaD?tkTVC3ONQ6ZR}})WUgj2=D6%&&g`v4rLE+|TmB+i zl0%H_%a|ar2;JbMof;{A)$_=Skj_kbczSA2_L_F; zydXy>4e?o|h(zHrMC0wklJ7*ikfT;Hx02LjWz-t}mF?laDd(u<`RZpA}zV<8b0^^lK!k8A+V!=m)%+eF*o*h8&u7s#Ts~ZhIzAkXhl}NPvdZPjMLQ zS*&uUl8xTB$6w)q;b2B{QmkR2pJ?TO=n=1^iwM>*_g-DYhPEmbSfq;|+UCWvpZ|LI zfZ4pUN3R7M_BgGW1?8Ihqj(DdZZ=KdgPEh5TX)SRI?`m%6M2fOb@`zEYj$R~YKLk| z*D#}Esv!nY&nC$iMOfZ6XGO%$m!(GSARfv$)W~heWM)1ES4hQjDF|Io**lT9!@ zwqh4qmzj0aF#mkcQBQqFe(*HODIumm3JqZ5*i`>11A?lu!_K-$#A(jLHC^XRN; zsF?FRXn>G<5;I5R3}_lenrRa37Br;1o%-Z5e%bq4upNsMp7FiXcNBOwp+zDu7%A2V zlht-HcBVXZ%NTst)O`ytLUvKap#7mnh7G6To3<%8vA=3)U}(tuaQH9&eZNA-1#0fdD< z;ixi>CtVe919~H(r|9oyDi?QyK`+Bws?`6=s-qO6#VPDHmMJygT{jmS)NbX=@W|bU z9;T03mhvhaHHWNC>BGcp?_*tc5~E`t7a%q7fWAZ7mj&?*ES$uVQ@(iw9 z+y0rj2Hl{A51(_STb^y0Mvp4lrOJZ&;%KoqGU(WWlhQ+5SZbzG%&Xch81HTbvch-E zu#r#=<)N~dxxF^;h*fuLp2lY?8es44GFkF!as|TS0XTH1=P6rTjnl6enX<`d-Jsyo zbWL-iEKV%y%T4D85$ad6vCVhpq%*#V{iHU@y3Gfb@9ocqS+{HO>qn|UUDylZIM0#h zsOp$N577AFUeboYw?+Z+<(2|Bey;(+yJN}O`HfI)4&&5(bvhqfZf@uRKnktHH1V!~ z)Z=nD?u@O8e$k@cyy^W%`x$xb^7*VbL^5X58!OUx*Y56sQ5^gAD94kUQT{M)C8zJl%!GY(r)XO>EngH+ya0Uq;WI%t61I*Ot zp(8$r@i@R+dw$2_-pTaAm6STxA(`B-l!`<2IjPOQ0Z#LEKO`A0zOc9E+WK^iHr!$; z&Bc7ob(EnIDDBr-0EspSzZRVqY(nb()7TBr$+j=t3njGSKzj`vU8SUZrX~LE-s(OGWL_PWb87-0+iKzbxtQ>HN#r9vz@1 zw=-a|l7_QZeUF|-CV~9+Zt^xVxkPi(gf&;cmv{F>86_0ny0&tp6#8^hKYrA#22pE^ z7!>Qpqg5}nnH`{%B-t;Hb!sY;L3YX4WXDY#ltGny$Lmzl^YG+da1MN>ZQ^9QtT8D~ zc)?hEx9KL7|MV*~(1&&@&fR=L2QTo30$1lHs33zF|HwAQDA%kmhuZSz1ao_Bi#+_5 zp}J4Fxr@HnCG2kpB?hNzmi{Ke9uiO70j?c^}CK`f6mo}-1Cf?s4*o^ zX9P(N#9N1^Ud0Y>v==r(xK|8(#U3!yck#H@jG<$&J-D}TbdJb671pGcxGEW&%F5fm zd{a$z;8>b93R|}4A5FQm((LW%q0bdFW0*BQ>#n=3tg% zndbLhViE$?=T|dMZLfuvE2QZx_9aH)d=6Zw*irh5XX#D!Q}?mY#H@)H4JZ{N%seEL ztF}_PgkfeoD)(KAWQ8^HRjtWS?vp=&Su?-o|3jOx|G%^u8{7Y(%{Vw2IR4v}{h!*5 zlaqt(|67|igQ{R_Ez!kjJ8l|*1_>wb%Ta1=M{5TF2m*!d-zpWiqqHe)@055rz8Qro z<+rCwd(Xb*KKcFit@cn`lX{xvdcIEQX2{CdR1T2Y+1W#-HiQpuaBOgf03=CeW(EPk z!P&XN!O_updC5X-qkXqwM(aVtI0vl@hyIEtgaiuSi)W!g{EjO(h65ev*aBv61IY0a z%J~t(!2zIyhwuL(+!zW0P$obRj}=kzn6*K_W>4*-}Z;J(*Qt~Z6fO+uX;Lje6C!!R*7wK)R_ z?hqPR{+@m*(0hX7~hk0_(rA#Z>a}|_)WPwBK?u?rSosgySQ61 z0Q+uBZTvZ!4g!?_{+N6qxx$@{M&<^;Mm&yb!7f|`19W; z;Et&I+6x&=bPeN=>r47MLK666SH=Ebo1_YyA)Iyl+oA>s=dBIoSYCYPUxRQ=3TzLY zQ6+R>uHp}VNc*_CLv0Eb7^r-eOW3oA3W!Y(KJx#-dz+j-eb{mE${ypVyFc3eev4dG zVD^66`x+UU0tXl{AaJLN8)G~?JOTA^;-f3%T)&wE0S>rU@P0Rj*l*yn4+!OjxpEf< z{Qwl0w_nni003b50fz(%F#8kiYXZ*vgLVQ6*!LH-1DJo*Pe2C<`G)3$+WLj&quTlb z=EP4a_zQ}keEkdLiQgV;d(yX~1DHS1PXGr9`GMxcyMCr02L~AZ1I3?m{VnSkzs)O~ zotVaZy+g)pa{T~z;ype3mFJ6>gJ-y|1No~$H=AWxKhl0S*Tlnq;eVeS0tf2~oT*1M zyO{|IuC5B!s-qg2(A{Y5i;!Eew=QF7@}%qE%(iz}K+d3E1YR{jKa33Cd7sK!lsT(I zuejyyV_zu@XB(?(+4kDO9IKSKX)~CK=l|nL{nPC(jR$%H%{slpt@9SAr}f7^CL4zH z{In4_2h>^7DWqQ8Ww&GX9g!v`Y}&HoM)iS`zl|c_DBKmpdiT#RonxFyCoB*QZc;Sp zCgE`#%Hr!wCz{6c&QFRr9eCu6IHbE@);^2s&3(|ITsd~SBq)@ zCBKp1c4o_Qs%F=Xiz}{J!-UM^GnJYD)k76F~jBZoZXgw|B&>q8Q~c`EA)#V#4O}vV zRIH!6gGt;s5XI}y7GgK6xB19sFXeE3Y19zFHsT;2fJLr3gbg9}yPovdZ4z&`A7qsz zE}$h1a;93@=)k4-F_+JUWJURNdwu9%AbY7#|`cljjbJz`ApU4+s4n9ecQc3tbL(AJj z^@;gId4&K<%&bVMGqmvwaXr-$n49Bk5v#{Z<<>mCp2Xodil_E$z%03@3m03P+nzlQ zO+6ty*U87={Zdunb0FMh%}?=VEmg~`R%{x@Xq5hTn@bpteyie=6vR|IziS`juw$a3 zz1x-9yxuD@-c}9^wEBGBwl#fM10VGel+JIYa!+Z-teNRfI#cW-W;h{>b`QUi)hc_+ zm6+cRvz?@+aM0jEmf63uG?Vv|@>Ig4tSzQT^0(RED%>?vDf8xF5tGjC2z)BL_5}GD z;|iGDPd$P5rt$y$r=xZ>_)lz~mOsGLBiLGHDzYgVMFGRC0>P=21C| zcXBm^^>_6Y+Hc$HHf+P_K4w7@%|Bw;aY0;z(qf?zTGha{?D$q8-=4c!EipihI$ymF zF^x-u73J73K$0S4M>B?Izq(NhO(_L`?tJvwpA@!@nv^r!S+^F1w}HeH$9iXe3@rwZ zm4YMUq0JKCp2b$>El94%px)M?`7!~@&Cwe@Nnw{w>IJ4J@ggPfYI-Ov?V^KqRiAUV z)e@fH%v-#4r{GO@I?{G^nsW>L1m1U!pxYwXhd+1w0RpXef=)CP^C<3(;a`+1$$C-P zps!k{fZPXe^(y2WJ|-3B@hH3@`yn99Tn+)!Ra8I<=jnl3+&nv? zZwoC5|&{)gj8$lS|6{&Af6a-9!$38%=YShYqWQ1I#4Dv z;Sj{|@CK6}j=ETVenTs{&`;R;e1l_|=gX%T8-!C!-HOh2`bI*VX-2KxzI>Qc%S`Y# zg-_V7DjFDU{_563UUE{SNwXkfd6pTe8p_x?zY1X*sC}Z;?5wJo7zi<7zN@H#!#6MEx`U1fr^KOaRCw;|mseknq)-IU=~Kj9m_yG^S769BcC`3BH7FYQ zG*SY6(u_V$*d>T<7n?SQYejXT2{Uend3y*?(1R`BZYzqV#YK40rHAs|MdAAianD`B zp)#Y^-pZWxN$RFXC{nUZ%(E^7HjOPWkipcG9#xbTwh9*Tn}Nr=WY{PBO=x$0B9T5Q zIj3*&Al$)g)!L;Kh11`ANkpGJFQGR^^;Pit!$YqP71k)FZ>62aJd zVgVv-ytbd!jws_SHoyAhRoa6I0VLu&n)y!;vJoAdkV9G>C;mUkd)Xm5>tPItMup?*dBZ6=Ci|1@l z$?G6$QEHcK6FJ}Q?UgfPMHBo-IJX-;?kU~(e6 z6CCY*7W`Lft5TwvE8B4xt00NFi!4f2I%0`6l52SlJ_)c8F(m_={zB__I7j}LJ1*n~ zpQ{-GZ9V*2*@?Y+;Q@F6ATix!F4n#3mnSu*eW+x4x3^ruR!swn^>9v2iurBv{3mpe z_|Q#5Z*kDj3K%lGfpBM`fCMP@SDF`&huC;SA!`%>Tyvi^fQ9)@v6P0LTj&Tn85 z%PxrH?}ix#_U=uF#JNjvC$`oW1jf#u5}?jn=laqL@ke$c>kvx`AtU7-m5~Ivp&#`v z%QwX^8%6ohm{nO1GA?!rh2nzbO{iOi|7+6(;VN6Mur>lECa&)TF1w~QE};*y6fadG zw%?T@id={UsYCjsnl9xg1@4{^CK0pmM%;Wk9!$UT;L{_u9UVf<4k-7}g?S@?>!(|F! ztf5p7Tdn0%qsq=ns#$qAe?1;^87WLm^#Suotq}c7y|~eWm#L5=ILFp8R}kt=nz2;a zsrI2%d8-;+@DRcJ-19Y$Ks;xKh-q7t|U9H^#$mY8+s= zgYRrftnOP%8^57j%Egv8Clc)3vLM~B=tACj9vS?6gDDB$I!FzZ5$f$Hpitt5uZ0)5 z&s^)iCclaV&wBfc{R5F38rHMeOLDUD5hfWsculdNu9s?5RZUOgKTrrv1~Hb*fI>1L z_Kr+C9?_d7{Q|C{7-kXYZT6ZL5{O{oNlp&fmR^Hr#|%{6lQQwO^kUQSVd>XN=TBsy zCNdQ2X8(iY^UMtxwX?JEc;kE}gWNZdEMF825tV<>RF#)aFva#Ov;{~e@iDv=$X^ap zNnz_iaCLa*576lYH;OsWeH=+ghA*WvZsG~K@UlG&#cMd8tWNkI-4f?BnGF<@|BATYqF{(aZaj*+W1l^Oc8Dlxy6aKjJng@$(B=( zQ0^?9s0Eb^Xz_JMU$z}~PYdLujfK`nI^bR?&%_Ip+``0!*mMH;k(S_8Zze6#%t-@v z{psl@*q6--kGdA4Gn{MVUHxlTzYX+=5s^A%-DRGz2z{Isaj|ET5C*gq-fi?+WsoEDFK7|*XNa;rg`M06sjT7TAL)xOZp6HzK!%dOPh7q zoU89G#EaMoL@<}iMaMBNulo?n=Otwd_%4DWT2NzNsa@Gy|DF@^=z1l4sJ)*WzA^cI{kTi|RH)Y!yNJ0vedt$TwH@j!EF!G1ZZkqe3fEEae@X zL5s>5H_&YT#tI_VGwvVNGnh@2B{y>zOys>3YjX>zUT6eOI<1s1)l7AvS{{N6RNOt= zh^SI1pd7ee3EGg~x}^^g`u@7Bnf6TFd=<#%m1aC7;I6KiRnBXQtVE@qg(Df2qfWlD zoj}35cFjDB#NT#xGZ>8;ev&znbK~)NK5P`fF|ygjPd(%!?{uSKwjG`u4?z;F9bdO$ zm6n#T633m_$l&9~Y!JotBqZ!HL_Wdo%Fd8_$R*?Is@1N%c5QbYKwwX^Xl2y=;w61T(L)sc(X8jt zS4X=~E65TRDvRX1s5Yp_Y;oVAeX!8MR9=N=t^BHl`;-21Pz+Z|p0#OYL8y8wdk1c~ zgbbci+vS)erlFJKll}$JLemyCS{jjBdoYo{lBn@buIFq;C3jk){o2V!SuXz@U@)*t zmB&-psfF?2W-1iC9ipUf65|Y<1xkr_5~1Z_;N|lGP&R7p9-8gp?p{lGP6hW{dwUXp zJ!!UO3b$SaMr#WqPCZ?_I%%L7Y)r%pRvNBQi!VCo*g_vE2zxFCrGR@&#hg<4wr3d6 z*xJ{pepzc7B>(5UdFKD|T!n!eR(dTaccehjkuLIYyCYpDWb?rACG^5Xn-y(`yf28i z?h*kC1ti(oDw|RouX-utW?Fy2IQ%GeI-;sY@mz6p;$ME=-+-eS|Z`jyyiTbB^)T&qO+AdMq z~Th%?t}Oi{)# za~+555+A7JLG}(aX|~H%kj;(l9frk z$!R#50$w*DMo0Hn*HW0nVPi8-TWk5{yHKW_=E}GSAxHoBXO^_;(TF$}&kPNSq;G#6 zTwNjCw$PfSzZ|{aV3P^tXGQp@JsO~j=kTVfBFkwGwhxBYxl?}Y)IuoFWIHsqY87q8(TLZ} zx(ZV3YyKk{Q*3fij=NwNtx@_fdFU4N2NqBpg$m;G$V9cU@mwBAN_z|?a$otXxE*LZ z%%Vhou-jp$r+G!EWs&5JZq~wE^M$MJ(3Wp5GBltyuwKd)Dr9h(X(vyLWfL#CzXyEe zLzlj$5n_o(q7@6snNeL<{|l65y?zqkUn$u{{(i`*4L1wzUczbU9D6v3W=U|U;77uA`=PoauwO|C{JX$?em- zA)0u^0qQ8>yhNgBGE*U25K-LrtZ!_x%rgs(ieXJ@^i|@M-0~|DW$XM+Pj2@Xzeaj>bcp55_*l|(l#Cj5+;;;+6c&eh%p3>1 z!3k-3Gy!E&Qnw{uMO$=?d#R^&C2a$DQfCPZ&)hdL9Qtk73_ZRBA-ia;KqjN1IP?v2 z=D7)R%%dzE7m)N`TVtOX_-PeXKdcPEO6x1dP+fM8_DN` zG?)u^8{t6{4mN-9NrI$K+kgPc=P4!*F>Wp7h=lY|c02Xs(mo<>S5z3&un;MA+f)sW zY8Y{;;~dRnPBOsM*0y8O2G3!j_w?@fMY~}gzUqt&_$eFkmI*F+e>VNpjAEnT66AQC z@ncMF2~xP{{Uh6Byx+ucZ$>H=H5rxa2B@{!lDX`|`U%(t6uo>PWf4eQ%lkIEJX{dNV0F+vJtFc&^wWFjuw%Psg!{-ah+-(kN9J^T&7-8Ln0@b zcA-sO4@Q}<^!QLnrUkDmIpM%Arwx=Twn16EfFKuT2!ygprWFq?9MFYJS=r0@#%f9c zac$}Cj}CtuZ=L|!6193Obb`+nwvsn1nNzYIu&@=&ZH$zDjj4LSq=;q|{fJVz5NE?Uw-|w0^9<)MH+)E7L&;Y8)6O-z zs~i&B3Z%|`XRyISM{KTGOW6h{^)#TWfKjwaZxY4hjpwslq^=g9`zNFdk87A={ED7= zF1Ul*1QU5KdOb@gJKM%&Q|oRM2KqUWab#R1 znM)i5IwLrp{JlbWim=5(Af+JxHh-nE{Aq`h_^ybZEYC5kWOX4zCLZ;cJ4|pY+}xIJ zvVG3nqt%vq6&v;VMF{U{fSMae&-5Mn8O@2TsT_(RF}KoC>ro1CE4^kk%Y(eU%`g?zq8R2+d`|}FUX`Y-D{n2#G7P; z$B6IPp!XPhJyRB+{x}hb%;&JY6{I{Bkd?d6VbdN z-9px#EH;&q2sa+{Z`cmyY{$@5>S95r`<3MuSKgi$(J;rR1J0fi_QDYOr$-1_Xxp^t z2HELhCRFz`4P^|hlC4XO#uy3x$J-(_s)v^w=a|nZ#|qYF`ZRfs-8qiFUx0fuXsa#A zjrU%@kmA*@fFBUb9?~YvcngMSHbyQhjw9EZDZXg*lW3999G&ToUu3FCM|wT{F$o&#FvOvV+ye$8|PO@`|;HR1NVbB@X< zP(0_m9xe{yfX^?Rq& z{ne^f(MwGOd;hpL#Y%tC)_|hiEwLIyJjo*tQ|}qvf$V)z{|$UQj?9dUpxX z;~(8CqngU^hT>@PHF`m4q^*y|sQIP)cBhV}iIBKip#D@dp6eq^ zfIN_orrG3D9%QY9*;;OMBTR1WWD ztru;kmlck_r`RQg_nR5Ug-DWS*`|EFYv$$tvxa_8R%vjiExGkeSEYs^sWC-nQBI8n zEl#GxIuBkB#oja9Ani}itVE06$Vd*RP=eiQc7u`B zXQQ;x>%i|urWzoO%q{EsH2+qBSiF9l9Z$sl@0J>dHm}I4y8HX*16#!-2vdniF{qOK znVTr>bq9X-EsP(R8sh*Q5iR`P)wV?KZNdr0*RymQFSP=+le-rZH_-H1or_!sFMk!3 zUR^E5EGC(*%8uH5bBc~4eOpfC)NR-#z?bxunnT6^!8kt;tF>ozhaHn3{ zz-pc8)XZ4A@`Vm^!IUyWizFJB>B9%;hSH!3e^giNk19Bqn;%H;jSkjbdpJVNPTi1E z60nc^x%$#z0dY>Tm=R=au+w1MNOd{_x~1NywDkdTio6=;Z6NX`Slki>LpclZ0;g#t zfhTBw=R3A^dm+cx=iB|?T;p9)V|<)$t{A+0#iG^m(@9?ie4X`MLoD{7&bj5(@_^K! z6Lp)c@S25FU9XzN(QnB-8wQ<`E5}X&S7(!{%Fmq!ps8;^+$;7W8K(Yc9DD2fWnfcO z66tRsQ`W*`^m&c~ib?3L=}&5c#S9#7dL+jqS9B7KJ7Lkn?T%ct~xc}P4` z#>R@ksm}6(L0ws`1>LRMZtpdRP1%2a<*cv>9kJ{yY7_8eQj(C3IxzfWiMTi-{CiPD zPi3zRC|A9TKguRp=yPes&KT~dpp zNxyaNBuksD%?C(?8=8(X_DvEOKDqqTk}5&gv4 zqQ{rxO|u=JO`&i+ShXcAHhXc*@a3A<1KVtgrnMwv7oJp;+G5 z%dhF1xl=-Z*Qw>EyI&iI(wnhLsr?Yrf6>fzdkU%_HpGL+bi8%@EUPZ(e}kZ9k`@du z$SOTYNH&h@kofj<5QP}Zm68)Z*5po%iffbeeAQ>SnfpY$I7&tCC7qs3qk!9w%dg@GwQ8flJ ziweyp&BET^x+nfR879#H?bH&LZm~yk6*@K097_&6&#jd0axcV*p;B3{KeHf>y3%EWc_{s%Hz6nrLG zaAo8lSC|1Rs!yG? z8jNYLSc-54jAmbUuS8}}CT!{)d+nShbrUk2^rIigi>#5D6~8=ZEo?`IyMK(WlkV4g*ZYe6X)B?w$BgJ7x|{5&vUw}OjL6pQ(%{ z{)KBsTzbA7fB}~h*@y*JUY@lSq0(g4Wv|+#YI8!8czAXDVUxfrfoRdFz^Cl)NxwRB zSrI$UWbfuL`0C z?C<1VvKbrxYze#)Ul2J6{B#L6;=pM{##d{lAX%Ky3k1^l65WLulqQufJ_Xi{Ew`O$ zko@JY{c(6+-(k-P?7-SF%7%2c?&m;DqMuWKrTgGNmtRu3@@aNt!FoTocW8Dc(=dW` zyOuSXJD6A-{uB4jVv=0czm?rYoOpnH>K#^V!-jpit~x;m{X^j*ua$#X!A0!B&u$kv zSV#r1>P?Y{vxtD>w&ItDSKX>9{FfRp{UGv@X8$n4zi-CwNFE@iPBrrzBVDBKchnAn zb;BU_eOoEe#XvIYdy`-T(NVcxS`wGlUQ=a?ZwOAxa*v#I_$i*N!COQsC8wNhP&~B z_#QF7hzA$F);#tI(i-8^x#X(=TnF+jyJN-Z@aRwXY(9^V@l{Cvm-gg?5d4RV%5AA0 z8W~M3KW2LAD@oDco&|u({P4P?udE9l5RxvU7Fv;*0EH*Wepj=l$62 zPr1o0oF$vx2Zzw7scH;a?t2&X7l_dJ*afV&9q{GEHs0i=gw8klsr452WEvVU;5rKs zA&&c~R*Q_l4|8q3AMETta0VqoVO@N#kJFf8&dkXtScl%u} z+wb=e?_7WX$l>kwi?8@MIXJ@*rjg-H)YQmN$|A}`$|jIi=+wiiVthSwD|lV~&!El8 z!JT~WzyIqk*!;J%$=R+1!1UF%6%T+3fuj+csOOlb6u|bcobkyocl<9r$qzr`+poyZ zFTee-cHyr>_^khP$%Ezp^9a`ZxD8yZ;Z_OaVo4;fH$Gey{ve?_ttzQfQecN0;Jf ztQ5-C^pE2`dPG`UH+NrTcyuCe-%$U=i_8Ab+ns~m#}_>2FPOpSssF8-nYWN4i37O_=9#*h3Y0E%%3o-< zQ-x7}0I;-bQVJPGQm41*wxQbb#!w4~P*V^1_4JvINA>e$SqlDyN2UaGn^8&_?W>nY z31A7{+JDH&o^A2mJ2szIqMrul+)u1Bh0lc1nAju~XuOb@)B(z%%mamGmTS`DP!n81 zAC!e3|ASWQQA=0TQnMo0%z20>zgstvU05PwpTJcuoEy?*zOQ+#-*&Y3_sA8_g)SfA zZXuu`oVk|2AjRu#WpP0&Kh2J)qng{QgE7yb2XdGG8_Q}%YQ=ost7QqMu2S^Sla4e1a^K zo$zKz$I^0#{fE3jjny%MlEx;N=M92=A;n0hF~(&fVC{vrY=+}}u%b3Gh=|p=>E zraZqASB$n5tt`-)>*c1P)Fz^dy1;V7fAzdt5xdXG@2>%F(yG2HgJ!M#e{obWK*gA1 zK#4ZQ4@{>cM&ONeYv0dp7U8y+iyVV}JaRdPCwXK#z#q@g^(j#OfW&;D?nN*Ugz@Cb zTHP4X?1Y}uTeeE7&#h9@-HS(B&A)(_+9LiMb7v9pNr;fxy!5DIWz<0ld0_+@UIJqv$7{X(lh=DUeaJe20Czc`6-KM@Q8e z$GjAhw^m0(u4@SO7jpu_u~+=fq_{Lo%|v)qY4s?4lIkddco|v)S8Wm= z(L;)YD}#IT?58Urc)!FI==uu=rrv|~02-kjy*Mi|Z)kSjxEf}g75*o^ZP!I1`E=u^ z2|3TayKLz}B`eWnWkeT1YDP3~ao94I5}9|GIo@1G18Olg?rQe6fdtH0hT(p_7ULrv z`g~z@coVWH{e2ZB#rf zN}fmA{O!y^N-)YT|^pSIT`wr&{4kb2*4AE*A);-B1#(V40 zcW#&e)=Nq%GvHqM>Oa`HV=K`H6!IVUV`RpE~toIngN$@$?IWxd^?c>4^ z28b3ybtoa`ProKSHtRR5nYU~A+Gcf%JgxO938;`Ia~0Y3m)VfE2aJ;3&!ZsltLnfo zq%4ykW&E~Ph8Y4G5Wwdpa)d zn;N4**-1n(CN!N7H{%@t=T~4uyxjckqIzgnav`C`La(R~C94GiT}TT9dXXC^ZW0hY z)tyh4#sK6;!Zz_;X==$(YJ*{@)F*7WJ!X1MhtVjDEK-rY-M0PUR_br^IO1>ycMQh# z6?)SO%3VgDkyE^?hh-B+?Ug*r+eM|c8ilh8Z-eO^vG^i};q;)rjZRxz023$2aq5NB7gsI$10w zDDkZIQO6vTtlR=FxKx=}`DyU|cHWmV+{Pt)yk@h^c?PE4XTsaPA2NMaD@>q<zZGAFA*@lM9C3GRcNGc=oeNi~@k^ny-s z-k9n__hAuizbpbcor`lrr7C#0%~SBusaS~I9;m#ig?_ga-qj(d!OOSIsD=%j*&?s1 z@P#LjMz?nCpHb??YB&*+0bL_)1igJSUo znZSC(9@XGUm)^{B>uuLw9EBl43w~QZEBIhG=mjuginm-Kx@RkycwQ4w+-%vo$nPlF z(LjMGKBXa6%kGF;pbWfb>xM5-cqXy{sg)kdf4-vDXXGO(rceAF@rDZpAT^{_%#G)` zA17-UW7b~uDlkF3A788_?*wA`H&CJKaF(?*tNITHyqALm+`Uy1*iDN0)rpHY z%nLO<@W&)GwMHuShKEA*X53Jk?&`5#bTq3l&x`DB>}xgNG}jw2GF9p)3Q?uPtk?_4 zlFHkogMH|O(3(u{H#{GuwD*;})4yC?(YZ$-kx&5YcgYIpsX*#Uvs9u_qP#wYOOE>J zCZestqPnrL?LCUO#mM$o^;0}*#913~ihb3Nilh4uaEQX}q;C#}1XirzXuhr=WWYgs zeF#h_x4vrdOZ+KGXA$TA^F{X7iXli_iRl^;!FyaXIlu~LDcuF+j_FZ8Hb~=z>b7(G^Pudarjdd^+^CKMW zSq;+~$IpO^mcEiTuwUr*$TSh^7x+CiYqL}s@sA+-l))OF!xW(biZi_}-A{867FQ$C z!JKeQSMn5uTP=q!KRF236C!kQE-3w+WffZdR^UJ97&32AOJJC18-wbf6q%pfN-bvi z8fJ8rYNfg*n6sxBwmWD>)L@I#o|Ryl?4HyF#J%M$ma)v}G*=9Sn>u6{CUF~9t#J-_ z*aFFROwmM5BK$Z~=hNOiIN(Bh1yWN5;D4uHYwYs7x_=y_fU1Uq`FbECZvZ`HhhvLA zFx!M;8UB#mYY^f_Kw#XYt^`st(ef$>2O#m z;{ErL}WKmuinu)e|uCM)_R(7cB ziq`=(1ys?seJuVDN@tb8n?G9u?_3j4jgzX#h!5`+(0I2(Nay)iV%C<(Kt|(L?O+#^mXlPN}3Gm7Vv8j<&1ZHNw-Q=6^Q4N5aP zff6c-qj8r%^*6PXimEpt$4O+_A>lmDTugqJpks58s$q5SGc*s0$+fqqsRYC?|LW5P z-JGlbt%?yQTr>EwNnAsiT@maRTH`dTN8!)Js9j^d_qpdUx|^Hu(qEn&LodPxLBtY= zqbU@15j`YZm^b_}>QHfExKd9oiC{;RpQhICRuzs}+mi?valuwm6(j-FoYWR7-`}F6 zD+_jp&fcSw#OX()<&yY3#Kgf_A`maew@XU*hUdC;0(~Pp*Y!on>$eV+L?`IVj~Wkx z%lB%fAE?e$DWNjId7Sy2JU&ZxB2+68xtI!N`QDREa8lM)*ehONjhQ*7-bX0OT)Ug^ zP&_HiS6G@yxbI{7CaRN{s9viYc}Us@Z8?&9gFQjX5m|D8q|5elLqU3Fn>Yq*hL!R3JCW@Gj96qqUc3LHp$HSxzsR z-=f;H<{7^PWVqK>!gM4uD~;$59U0}q4wHu(*Ujclnm}xe69-N z=smL#z?0-^PjjR-WjqLu>n#)z%U#WzbNrq>N0PO(E|U>g-F5Cd!)i?RREfk@_a);a zt|EEZ)?7$TkJf}_meD^ws390(t(2ZUE!)wxPg-`Sl`)eZr}}mS-$(`uZCn$lTD*2m zpl-5f9~;3b`9_iYl*2vOyP#Z}11(z0{})<6Gzo0vPe&Xtfzz zqH5KEpDLErc6fzo&{`CJG0=P;*;Tt0nCfb)y|t61_xq`vOpmTe2tm$p>PAkZqty=M zBT2{qi{uO`>98zJElfRs)0Ab!FKVvz2 z_=pvtM^o9l%!T_1wu(Il{-4YT=#1n}KAG|?znv8`h7T_YI3D~k%o*{jp+*3{YUpIv_HNi;IKcwg9IR-xXTR*19Do#o-Qk9|${2vc^g2;Kp= zuA4`e7s|6(^8Hy#JiY`pL!Bx7nH#+nyHgWi2SH zzw9-Lx^&Oy@I0Nvil{-I{?bn9lXXde_8kSgB0g|YHB2daf598$RS@teJLp=*W$p7q+@PkV8_pY!5b!zVF=xPKYRi)(ZFYi%((zmQb6 zzrGQrAKrS@79SmDTi^B)$lU;t@3UW)?*250;~QH|&2$&Upwz zK7n5P-;zDs)e}*XyXHq=WONNvRIj2T?r-R0Px-U$nt-#vC;7E{EHL1SbdrNGtPXqg z(+X)jIXlJX9=;w`+{!L!sHzvlBQVEES{dO?;I7WsfYqO`4%lSUW^6v43N3|WEP_oi zdDF8<_QB6BzHIrKmhs&nM+K+;tE{J!X~>cSKH6&o^JKQB_v*%I864G}Qp3)(lrfvF zKz^uybEnlZabq1vViOd7`u_s52KV#-F=&4+`t?H;rJFP;@IECw_#DJDhq+n$CW5lP ze^CvNKRD-2&vje4z%h7B?fF^(LVAvXUtz*DEp**<68FWpc`tzxJfcJY_F*~4H7kDE z2?;Vav}^qnYh#Cvee;Di?09VzlDk~cVvL&PMTi9Lf z^1Al0jx;V4Wu2JFQ)-(&IXidgOpbXBCi3iTB@Mi`5FsnnBCHsb?ITmS@P1|t}vG2~6{$Y~2 zs2J(9U}}SkXdS0_u6Oa@@RYXhA|JDW#f2@6q3Fr2kkn%~;OpBv9>b#1W~gSv5>Pgm z+$uaYSXT+vOhzm@j%ip2hs{u3um`JF-wZ~UHksGF$Ep@DZA4H<7sX0SoeT+5{yQT` zIuIZPH)q%_@WqfeD+!X|)RF6iPyi|_arePzDiC7&0{_Qw=)ku)XKcv`a_95w1xiBUtRuZXD+l0Gwh0Zv(iNXf19y zu*uhiu_p~kHeqWFaB&Pxih)6n$(m2khx%d_W03MD$E+>|c6YSVT^)&0I|+x=8ycC9 z+8X2{1Ld3L`OiH&Mb!Jg3f*DOww}0~9Fvq}eNEL@VmV|Los+_jF2i^a8zXkxShO!T zTdGQnFGba%lfPqJV?6+;Gc$hlC6ITQc(YkAPaXSPpRDP#`BRwL;R{clEBnm~V$ey} zh0i2(PFQfTY=5*%b({lbHAUo1 z?ks{xNJxPUAPpc;39vtmzW59mDSdFJ02N*C0K|!tnv(t~yQ_sZtVqfmHHX`A9_?FP zQ?A~8vndC?{wf~t1!tvqt-JHz3g=&p%U|H5F-^cKjOQX$QhAsGO=c|nVmS($Q)T`5 zZCFiE-7H3g>!aA}bO4iRyPf%KN?5i9#IiJ^?B)EWRvuL9BI9@1;vJGQRMjgd3x&QE zu8x2qmdmFNUu!v1bm3sIW=*q<=a%b#V(lzG6A2Kr?l_65t;5x>5jE>X``epNOR}Py z``!XzA0<_&lJVg*edyC_R2oX4xG*S@Q$ew!Q@N=ve!d48j%N=|7}p9-F=9R6lEr0X zEm{&m$!C7$JJA-fud&anO>buRP z4Sg`K`@bctYfEee==D* z0kYzw;tvU8#Ykw#$E1d39WYs>m&q*#jFDBfKVVn8(QbmZM>3>(zx}y-JVc`dNhq7_e)d&vBm&JC}2TEyVTY$6`JH zi?|Xo9(ei|A8rJP%4Gc4o%eR#Slq;>M4dFb#i^3EZY~XkVPy4gxEEO!ZTR#cZ^2tR zIRzRleEdts5Q=B^inTsZn(*p$O=#>#*E$66uc9}Ja|xIF{=#QD7aNw+j8dBaT%QDH zDtay%goP9=bUeSo8e3jQi{X`NX9^Zny(e0@Q&X6wp0La*`i~jN9*o@RQVNuqs(X&# zwSK)8y?f6{9_Bx81m;PC&(sM*#&Z;uE9hkiTfF7w^2i8L9ud7sMwvoO?Ms~KO6&2V zqCuz_Kswe6t$-*Pi4U(Zir=M`n;m5+8^7e?Yi!N(I@$LmxF(;-7#x6@{xQMMC-@q| zBR-YmlzAnWL;e&r7O_@Bm%7QxQon(JvJ43loXR8KfNeo=qwdBL5gbup7*>&2 zK6r^pUcd!|e*Y8LG^bOjTdk)Bi5F0%G`OWT7f;muyU!n?$le5bm^$5@fE~|M{&$R~ zthN3xD>;fUOz;i7SY`ln>&4!cuzkI8c1z8koEgGj2>w0hhjEL%J!R?xQ9?^zk^1{)Mc4R+!u&pjz%rF zIJDd;f)!R}vKU?W*N>O7V^!vl5@cwEGFx+&HAn={2Hf z$L8@Q_#qjIj4)-ixgW~OSHv;q#h6jW2WhwYiqlT{BjQgqp~2$pAb8CzqD>?GWNQ6C zRx#gykycI)Rk1KODqzyoM(*kp?a?PN=W{-ZR`;$VzB88*WnO${>uYAuIgQ^w+1#s# zJ_T5FT&Pm$%f|1(%co5*HS@!RBVfBfS0a z^^Un4Vq6(QxNBUKnGJdI&*VjmE5x(00tVp{RT=%z@Dkb=KSN-n1dMCQ5DlENYpXQJ zqP0kmzcs7~QPJMKJ|wUqB*LOoTD%`_o4f^iewra+ac1zT+)YsYfOt5a=;WwbKn%XF zLJ+shs5rZ`a6M`7A>o}4m_iwE#;L4%q1p`&OL=0CBfG&i;_-wDgmXk9oSoUMD_@KR z%QLT=O~}zHva0DdhHSo}?u=IR6&+P+~(C@kI{>^pV;u|vN>NO?+#GIuE? z0U>hIvMKBwP7m37yu@)V^RS!)0f@0s5GR;6kz3tc613zm50$Tdylt@BHC&6t_aw_~D|}Hq(bh`R z@8Qd_ojHi*6dzese?+I65E1>SjTWSfI=B1SE)W)YG(kl$|7qsx+1!0=f}T80{hP9d z^62Ss{)sTJ3KXU&qNk;6>7{MIB$jRSwm1UX0=XOtOY*%tg9ETryDJ_dczMzR(BRk< zWTT#rroP@E2VSUxUAXl%H0v)pthol{N{pMgEk~iVJ5|L-rnSLKJaYqk|GJ}&_~So_ z!ZtL2aUoh^UO*H?6g}%V`~_oO2bnX{8niL)4U-TdTM7c5J5EVuLQ zEJW(JB@fBTK0^#MS1L06y0!wGKF!4|ubVb)t)kh=58+Q_!*we;>YjkT2KwPH6T~YO zgUBAt>zDi3Y`NR5J!-&{DiV%EH~Z*D`}_`lJ*1T6sCj^kkz+3HwP$N3X!0IIc=Z{} zzry#e#)%|3KYUvWj)B=}rl{yvu#hDoTNiEWaHK>0L{20^cm8Lq#otPf%<4Gcf#Fa; zG_`-~w%7VR+rrWNVPJa?Y9VX}QNhbu{uIB?Q(J=zk-*Lhz~AsK(2snXvy!qpIRjDm zW^)Dt3dMqCm@2W~Oeu2SuthQ{F^p>N1o2d(;jWyIuN#V(0afkSIP=OkTg$6cg6`9z zf0~prM+u@1Ewf4yX|ej1DZH^*O9OR}N6%7yp#&%$Wep7HxZQNn7V6-7#2@IQj(zGM zuXw&<<_`K)dj#fYvT<6Nn9>!K)R3{2L9Q8pTr1pu$54C?6xUv0NkX%4kzIn2?p|lg}nHdhhSGbnu@sB*4*aA!yUwsZgrPJLfc8Ql)(`gpva`)pJ)N zGIi8>&gasxwCBehjczq_9d%TP>gGbn9A@i|c%f9nNX_DKjD%FiH~c|`>+;ByuyHcf zNbu*O+BCnnd;4lRKDIA%qQ{Z?m(bD!@WCsR^IkeWgxGBlAf(+-pzA zgW>hiih(*xe(n~g!J=!{HIzk5n^<6=qs{fA(Hn=fcM_D&gDl9Hwt?||4UL;#{=|6p z=ag9>6sN~ZPv0oQU>%_?rA+Qe1CE2Br(A1w`b47q>!_$wR)E>YVE2HSC4p%WYgjNT zg_g5NI~yLbg@EK`fLVqj=*zF~*s|!xPqfadsy%=u)PCd5k`ojr7eJ~Lz^F=h#2R$L zQ~37_0sGO}$L%pV1a#7r1jK_GbfTQW3=b$UBW(dtmt{>c!=X;tRu7`_nob~r@E(N( zx~7&fMLf-2R(lsNz~X7IcQ=_7m^^d9)xC0VgihU^h?{@cXh_i78pM)gi-4_5w}Yoz z0je$zND$S!rfM-B*S;_DnG^J?`B^Wrz*^IXB=obOQ<6Dg2w*nGM*kv+7*|=N?e1F8 zpFu4ˏ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 MIN_CARDS_NKIND + and not is_ace(cards[0])): + return factorial(len(cards)) * card_score[cards[0][VALUE]] + + # construct sorted list of non-Ace cards + nonace_cards = sorted([card for card in cards if not is_ace(card)], + key=lambda x: get_score(x)) + + # construct list of Ace cards + ace_cards = list(set(cards) - set(nonace_cards)) + + # run must have at least `MIN_NONACE_RUN` non-Ace cards in it + if len(nonace_cards) >= MIN_NONACE_RUN: + + is_run = True + prev_val = prev_colour = None + score = 0 + + # iterate through cards to make sure they form a run + for card in nonace_cards: + + # CASE 1: for the first card in `nonace_cards`, nothing to + # check for + if prev_val is None: + score = prev_val = get_score(card) + prev_colour = get_colour(card) + + # CASE 2: adjacent to previous card in value + elif get_score(card) - prev_val == 1: + + # CASE 2.1: alternating colour, meaning continuation of run + if get_colour(card) != prev_colour: + prev_val = get_score(card) + prev_colour = get_colour(card) + score += prev_val + # CASE 2.2: not alternating colour, meaning invalid run + else: + is_run = False + break + + # CASE 3: repeat value, meaning no possibility of valid run + elif get_score(card) == prev_val: + is_run = False + break + + # CASE 4: gap in values, in which case check to see if can be + # filled with Ace(s) + else: + gap = get_score(card) - prev_val - 1 + + gap_filled = False + # continue until gap filled + while is_run and gap and len(ace_cards) >= gap: + + gap_filled = False + + # search for an Ace of appropriate colour, and remove + # from list of Aces if found (note that it doesn't matter + # which Ace is used if multiple Aces of same colour) + for i, ace in enumerate(ace_cards): + if get_colour(ace) != prev_colour: + ace_cards.pop(i) + prev_val += 1 + prev_colour = get_colour(ace) + score += prev_val + gap -= 1 + gap_filled = True + break + + if not gap_filled: + is_run = False + + if is_run and gap_filled and get_colour(card) != prev_colour: + prev_val = get_score(card) + prev_colour = get_colour(card) + score += prev_val + else: + is_run = False + + if is_run and len(cards) >= MIN_RUN and not ace_cards: + return score + + return -sum(values) + + +def comp10001go_valid_groups(groups): + for cards in groups: + if not cards or (len(cards) > 1 + and comp10001go_score_group(cards) < 0): + return False + return True + +# Sample solution 2 + +import math + +SUIT_TO_COLOUR = dict(zip('HDCS', 'RRBB')) +VALUE_STRING_TO_VALUE = dict(zip('A234567890JQK', range(1, 14))) +VALUE_TO_VALUE_STRING = {v: k for k, v in VALUE_STRING_TO_VALUE.items()} + +class Card: + def __init__(self, card_string): + if isinstance(card_string, tuple): + card_string = VALUE_TO_VALUE_STRING[card_string[0]] + card_string[1] + self.value_str = card_string[0] + self.value = VALUE_STRING_TO_VALUE[self.value_str] + self.suit = card_string[1] + self.colour = SUIT_TO_COLOUR[self.suit] + self.inv_colour = 'R' if self.colour == 'B' else 'B' + self.orphan_value = -20 if self.is_ace() else -self.value + + def __eq__(self, other): + return self.value_str == other.value_str and self.suit == other.suit + + def __repr__(self): + return f'Card(\'{self.value_str}{self.suit}\')' + + def __str__(self): + return f'{self.value_str}{self.suit}' + + def is_ace(self): + return self.value_str == 'A' + + def is_black(self): + return self.colour == 'B' + + def is_king(self): + return self.value_str == 'K' + + def is_red(self): + return self.colour == 'R' + + +def construct_n_of_a_kind(cards): + # Early bail if we don't have enough cards. + if len(cards) < 2: + return None + + # Ensure that all of the cards have the same value and are not an Ace. + value = None + for card in cards: + if card.is_ace(): + return None + elif value is None: + value = card.value + elif card.value != value: + return None + + # Return the cards as is. + return list(cards) + + +def construct_run(cards): + # Early bail if we don't have enough cards. + if len(cards) < 3: + return None + + # Partition the cards into Aces and non-Aces. + non_aces = [] + aces_by_colour = {'B': [], 'R': []} + for card in cards: + if card.is_ace(): + aces_by_colour[card.colour].append(card) + else: + non_aces.append(card) + + # Ensure we have enough non-Aces. + if len(non_aces) < 2: + return None + + # Sort the non-Aces by value. + non_aces.sort(key=lambda card: card.value) + + # Attempt to construct a valid run from the avaialble cards. + prev = non_aces.pop(0) + run = [prev] + while non_aces: + top = non_aces[0] + + # Check for a normal valid transition. + if prev.value + 1 == top.value and prev.colour == top.inv_colour: + run.append(non_aces.pop(0)) # Consume the current card in the run. + prev = top + else: + # Check if we can do an Ace insertion. + aces = aces_by_colour[prev.inv_colour] + if aces and not prev.is_king(): # Can't go higher than a King for Ace insertion. + ace = aces.pop(0) # Consume the next Ace. + run.append(ace) + prev = Card((prev.value + 1, ace.suit)) + else: + # We did not find a valid transition. + return None + + # If we have any aces left over, we do not have a valid run. + if aces_by_colour['B'] or aces_by_colour['R']: + return None + + return run + + +def score_n_of_a_kind(cards): + return cards[0].value * math.factorial(len(cards)) + + +def score_orphans(cards): + return sum(map(lambda card: card.orphan_value, cards)) + + +def score_run(cards): + return sum(range(cards[0].value, cards[-1].value + 1)) + +def comp10001go_valid_groups(group_strings): + # Convert the card strings to Card objects. + card_groups = [list(map(Card, card_strings)) for card_strings in group_strings] + + # Attempt to shape each of the groups of cards into the three allowed shapes. + for cards in card_groups: + if construct_n_of_a_kind(cards) is not None: + pass + elif construct_run(cards) is not None: + pass + elif len(cards) == 1: + pass + else: + return False + + # If all groups of cards were one of the three allowed shapes, we're good. + return True + +# ------------------------------------------------------------------------------ +# Part 3 - Play and Group! + +# Sample solution 1 + +from math import factorial + +# index of value of a card +VALUE = 0 + +# index of suit of a card +SUIT = 1 + +# value of Ace +ACE = 'A' + +# dictionary of scores of individual cards +card_score = { + '2': 2, + '3': 3, + '4': 4, + '5': 5, + '6': 6, + '7': 7, + '8': 8, + '9': 9, + '0': 10, + 'J': 11, + 'Q': 12, + 'K': 13, + ACE: 20, + } + +# suits which are red +RED_SUITS = 'HD' + +# suits which are black +BLACK_SUITS = 'SC' + +# card colours +RED = 1 +BLACK = 2 + +# minimum no. of cards in an n-of-a-kind set +MIN_CARDS_NKIND = 2 + +# minimum no. of non-Ace cards in a run +MIN_NONACE_RUN = 2 + +# minimum no. cards in a run +MIN_RUN = 3 + + + +def is_ace(card): + """Boolean evaluation of whether `card` is an Ace""" + return card[VALUE] == ACE + + +def get_score(card): + """return the score of `card`, based on its value""" + return card_score[card[VALUE]] + + +def get_colour(card): + """Return the colour of `card` (`RED` or `BLACK`)""" + if card[SUIT] in RED_SUITS: + return RED + else: + return BLACK + + +def comp10001go_score_group(cards): + """Validate/score a group of cards (order unimportant), supplied as a + list of cards (each a string); return the positive score of the group if + valid, and negative score otherwise. Note, assumes that all cards are + valid, and unique.""" + + # construct sorted list of values of cards (ignore suit for now) + values = sorted([get_score(card) for card in cards]) + + # CASE 1: N-of-a-kind if all cards of same value, at least + # `MIN_CARDS_NKIND` cards in total, and not Aces + if (len(set(values)) == 1 and len(cards) >= MIN_CARDS_NKIND + and not is_ace(cards[0])): + return factorial(len(cards)) * card_score[cards[0][VALUE]] + + # construct sorted list of non-Ace cards + nonace_cards = sorted([card for card in cards if not is_ace(card)], + key=lambda x: get_score(x)) + + # construct list of Ace cards + ace_cards = list(set(cards) - set(nonace_cards)) + + # run must have at least `MIN_NONACE_RUN` non-Ace cards in it + if len(nonace_cards) >= MIN_NONACE_RUN: + + is_run = True + prev_val = prev_colour = None + score = 0 + + # iterate through cards to make sure they form a run + for card in nonace_cards: + + # CASE 1: for the first card in `nonace_cards`, nothing to + # check for + if prev_val is None: + score = prev_val = get_score(card) + prev_colour = get_colour(card) + + # CASE 2: adjacent to previous card in value + elif get_score(card) - prev_val == 1: + + # CASE 2.1: alternating colour, meaning continuation of run + if get_colour(card) != prev_colour: + prev_val = get_score(card) + prev_colour = get_colour(card) + score += prev_val + # CASE 2.2: not alternating colour, meaning invalid run + else: + is_run = False + break + + # CASE 3: repeat value, meaning no possibility of valid run + elif get_score(card) == prev_val: + is_run = False + break + + # CASE 4: gap in values, in which case check to see if can be + # filled with Ace(s) + else: + gap = get_score(card) - prev_val - 1 + + gap_filled = False + # continue until gap filled + while is_run and gap and len(ace_cards) >= gap: + + gap_filled = False + + # search for an Ace of appropriate colour, and remove + # from list of Aces if found (note that it doesn't matter + # which Ace is used if multiple Aces of same colour) + for i, ace in enumerate(ace_cards): + if get_colour(ace) != prev_colour: + ace_cards.pop(i) + prev_val += 1 + prev_colour = get_colour(ace) + score += prev_val + gap -= 1 + gap_filled = True + break + + if not gap_filled: + is_run = False + + if is_run and gap_filled and get_colour(card) != prev_colour: + prev_val = get_score(card) + prev_colour = get_colour(card) + score += prev_val + else: + is_run = False + + if is_run and len(cards) >= MIN_RUN and not ace_cards: + return score + + return -sum(values) + + +def comp10001go_valid_groups(groups): + for cards in groups: + if not cards or (len(cards) > 1 + and comp10001go_score_group(cards) < 0): + return False + return True + + +def comp10001go_score_groups(groups): + score = 0 + for group in groups: + score += comp10001go_score_group(group) + return score + + +def comp10001go_randplay(discard_history, player_no, hand): + + from random import shuffle + + shuffle(hand) + + # for first turn, select lowest card + return hand[0] + + +def comp10001go_play(discard_history, player_no, hand): + + # for first turn, select lowest card + if not discard_history: + return sorted(hand, key=lambda x: get_score(x))[0] + + # for subseuquent rounds, select card which maximises optimal score + else: + return sorted(hand, key=lambda x: get_score(x))[0] + + + +def comp10001go_group(discard_history, player_no): + + # construct list of discards from `discard_history` + discards = [] + for turn in discard_history: + discards.append(turn[player_no]) + + return [[card] for card in discards] + +# Sample solution 2 +SUIT_TO_COLOUR = dict(zip('HDCS', 'RRBB')) +VALUE_STRING_TO_VALUE = dict(zip('A234567890JQK', range(1, 14))) +VALUE_TO_VALUE_STRING = {v: k for k, v in VALUE_STRING_TO_VALUE.items()} + + +class Card: + def __init__(self, card_string): + if isinstance(card_string, tuple): + card_string = VALUE_TO_VALUE_STRING[card_string[0]] + card_string[1] + self.value_str = card_string[0] + self.value = VALUE_STRING_TO_VALUE[self.value_str] + self.suit = card_string[1] + self.colour = SUIT_TO_COLOUR[self.suit] + self.inv_colour = 'R' if self.colour == 'B' else 'B' + self.orphan_value = -20 if self.is_ace() else -self.value + + def __eq__(self, other): + return self.value_str == other.value_str and self.suit == other.suit + + def __repr__(self): + return f'Card(\'{self.value_str}{self.suit}\')' + + def __str__(self): + return f'{self.value_str}{self.suit}' + + def is_ace(self): + return self.value_str == 'A' + + def is_black(self): + return self.colour == 'B' + + def is_king(self): + return self.value_str == 'K' + + def is_red(self): + return self.colour == 'R' + +def comp10001go_play(discard_history, player_no, hand): + # Convert the card strings to Card objects. + discard_history = [list(map(Card, card_strings)) for card_strings in discard_history] + hand = list(map(Card, hand)) + + # Greedily discard the smallest valued card in my hand. + hand.sort(key=lambda card: card.orphan_value) + + return str(hand[0]) + +def comp10001go_group(discard_history, player_no): + return [[discards[player_no]] for discards in discard_history] + +# ------------------------------------------------------------------------------ +# Part 4 - Optimal grouping + +# Sample solution 1 + +from math import factorial + +# index of value of a card +VALUE = 0 + +# index of suit of a card +SUIT = 1 + +# value of Ace +ACE = 'A' + +# dictionary of scores of individual cards +card_score = { + '2': 2, + '3': 3, + '4': 4, + '5': 5, + '6': 6, + '7': 7, + '8': 8, + '9': 9, + '0': 10, + 'J': 11, + 'Q': 12, + 'K': 13, + ACE: 20, + } + +# suits which are red +RED_SUITS = 'HD' + +# suits which are black +BLACK_SUITS = 'SC' + +# card colours +RED = 1 +BLACK = 2 + +# minimum no. of cards in an n-of-a-kind set +MIN_CARDS_NKIND = 2 + +# minimum no. of non-Ace cards in a run +MIN_NONACE_RUN = 2 + +# minimum no. cards in a run +MIN_RUN = 3 + + + +def is_ace(card): + """Boolean evaluation of whether `card` is an Ace""" + return card[VALUE] == ACE + + +def get_score(card): + """return the score of `card`, based on its value""" + return card_score[card[VALUE]] + + +def get_colour(card): + """Return the colour of `card` (`RED` or `BLACK`)""" + if card[SUIT] in RED_SUITS: + return RED + else: + return BLACK + + +def comp10001go_score_group(cards): + """Validate/score a group of cards (order unimportant), supplied as a + list of cards (each a string); return the positive score of the group if + valid, and negative score otherwise. Note, assumes that all cards are + valid, and unique.""" + + # construct sorted list of values of cards (ignore suit for now) + values = sorted([get_score(card) for card in cards]) + + # CASE 1: N-of-a-kind if all cards of same value, at least + # `MIN_CARDS_NKIND` cards in total, and not Aces + if (len(set(values)) == 1 and len(cards) >= MIN_CARDS_NKIND + and not is_ace(cards[0])): + return factorial(len(cards)) * card_score[cards[0][VALUE]] + + # construct sorted list of non-Ace cards + nonace_cards = sorted([card for card in cards if not is_ace(card)], + key=lambda x: get_score(x)) + + # construct list of Ace cards + ace_cards = list(set(cards) - set(nonace_cards)) + + # run must have at least `MIN_NONACE_RUN` non-Ace cards in it + if len(nonace_cards) >= MIN_NONACE_RUN: + + is_run = True + prev_val = prev_colour = None + score = 0 + + # iterate through cards to make sure they form a run + for card in nonace_cards: + + # CASE 1: for the first card in `nonace_cards`, nothing to + # check for + if prev_val is None: + score = prev_val = get_score(card) + prev_colour = get_colour(card) + + # CASE 2: adjacent to previous card in value + elif get_score(card) - prev_val == 1: + + # CASE 2.1: alternating colour, meaning continuation of run + if get_colour(card) != prev_colour: + prev_val = get_score(card) + prev_colour = get_colour(card) + score += prev_val + # CASE 2.2: not alternating colour, meaning invalid run + else: + is_run = False + break + + # CASE 3: repeat value, meaning no possibility of valid run + elif get_score(card) == prev_val: + is_run = False + break + + # CASE 4: gap in values, in which case check to see if can be + # filled with Ace(s) + else: + gap = get_score(card) - prev_val - 1 + + gap_filled = False + # continue until gap filled + while is_run and gap and len(ace_cards) >= gap: + + gap_filled = False + + # search for an Ace of appropriate colour, and remove + # from list of Aces if found (note that it doesn't matter + # which Ace is used if multiple Aces of same colour) + for i, ace in enumerate(ace_cards): + if get_colour(ace) != prev_colour: + ace_cards.pop(i) + prev_val += 1 + prev_colour = get_colour(ace) + score += prev_val + gap -= 1 + gap_filled = True + break + + if not gap_filled: + is_run = False + + if is_run and gap_filled and get_colour(card) != prev_colour: + prev_val = get_score(card) + prev_colour = get_colour(card) + score += prev_val + else: + is_run = False + + if is_run and len(cards) >= MIN_RUN and not ace_cards: + return score + + return -sum(values) + + +def comp10001go_valid_groups(groups): + for cards in groups: + if not cards or (len(cards) > 1 + and comp10001go_score_group(cards) < 0): + return False + return True + + +def comp10001go_score_groups(groups): + score = 0 + for group in groups: + score += comp10001go_score_group(group) + return score + + +def comp10001go_randplay(discard_history, player_no, hand): + + from random import shuffle + + shuffle(hand) + + # for first turn, select lowest card + return hand[0] + + + +def comp10001go_partition(cards): + + # BASE CASE 1: no cards, so no grouping to make + if len(cards) == 0: + return [] + + # BASE CASE 2: single card, so make a singleton group + if len(cards) == 1: + return [[cards]] + + # RECURSIVE CASE + out = [] + first = cards[0] + for sub_partition in comp10001go_partition(cards[1:]): + + # insert `first` in each of the subpartition's groups + for n, subpart in enumerate(sub_partition): + out.append(sub_partition[:n] + [[first] + subpart] + sub_partition[n+1:]) + + # put `first` in its own subpart + out.append([[first]] + sub_partition) + return out + + +def comp10001go_best_partitions(cards): + + # generate and score all valid card groups from `cards` + valid_groups = [(part, comp10001go_score_groups(part)) for part in comp10001go_partition(cards) + if comp10001go_valid_groups(part)] + + if valid_groups: + first_group, best_score = valid_groups[0] + best_groups = [first_group] + for group, score in valid_groups[1:]: + if score > best_score: + best_groups = [group] + best_score = score + elif score == best_score: + best_groups.append(group) + return best_groups + +# Sample solution 2 +import itertools +import math + +SUIT_TO_COLOUR = dict(zip('HDCS', 'RRBB')) +VALUE_STRING_TO_VALUE = dict(zip('A234567890JQK', range(1, 14))) +VALUE_TO_VALUE_STRING = {v: k for k, v in VALUE_STRING_TO_VALUE.items()} + + +class Card: + def __init__(self, card_string): + if isinstance(card_string, Card): + card_string = str(card_string) + elif isinstance(card_string, tuple): + card_string = VALUE_TO_VALUE_STRING[card_string[0]] + card_string[1] + self.value_str = card_string[0] + self.value = VALUE_STRING_TO_VALUE[self.value_str] + self.suit = card_string[1] + self.colour = SUIT_TO_COLOUR[self.suit] + self.inv_colour = 'R' if self.colour == 'B' else 'B' + self.orphan_value = -20 if self.is_ace() else -self.value + + def __hash__(self): + return hash(str(self)) + + def __eq__(self, other): + return self.value_str == other.value_str and self.suit == other.suit + + def __repr__(self): + return f'Card(\'{self.value_str}{self.suit}\')' + + def __str__(self): + return f'{self.value_str}{self.suit}' + + def is_ace(self): + return self.value_str == 'A' + + def is_black(self): + return self.colour == 'B' + + def is_king(self): + return self.value_str == 'K' + + def is_red(self): + return self.colour == 'R' + + +def construct_n_of_a_kind(cards): + # Early bail if we don't have enough cards. + if len(cards) < 2: + return None + + # Ensure that all of the cards have the same value and are not an Ace. + value = None + for card in cards: + if card.is_ace(): + return None + elif value is None: + value = card.value + elif card.value != value: + return None + + # Return the cards as is. + return list(cards) + + +def construct_run(cards): + # Early bail if we don't have enough cards. + if len(cards) < 3: + return None + + # Partition the cards into Aces and non-Aces. + non_aces = [] + aces_by_colour = {'B': [], 'R': []} + for card in cards: + if card.is_ace(): + aces_by_colour[card.colour].append(card) + else: + non_aces.append(card) + + # Ensure we have enough non-Aces. + if len(non_aces) < 2: + return None + + # Sort the non-Aces by value. + non_aces.sort(key=lambda card: card.value, reverse=True) + + # Attempt to construct a valid run from the avaialble cards. + prev = non_aces.pop() + run = [prev] + while non_aces: + top = non_aces[-1] + + # Check for a normal valid transition. + if prev.value + 1 == top.value and prev.colour == top.inv_colour: + run.append(non_aces.pop()) # Consume the current card in the run. + prev = top + else: + # Check if we can do an Ace insertion. + aces = aces_by_colour[prev.inv_colour] + if aces and not prev.is_king(): # Can't go higher than a King for Ace insertion. + ace = aces.pop() # Consume the next ace. + run.append(ace) + prev = Card((prev.value + 1, ace.suit)) + else: + # We did not find a valid transition. + return None + + # If we have any aces left over, we do not have a valid run. + if aces_by_colour['B'] or aces_by_colour['R']: + return None + + return run + + +def score_n_of_a_kind(cards): + return cards[0].value * math.factorial(len(cards)) + + +def score_orphans(cards): + return sum(map(lambda card: card.orphan_value, cards)) + + +def score_run(cards): + return sum(range(cards[0].value, cards[-1].value + 1)) + + +def score_group(cards): + if len(cards) == 1: + return score_orphans(cards) + + grouped_cards = construct_n_of_a_kind(cards) + if grouped_cards is not None: + return score_n_of_a_kind(grouped_cards) + + grouped_cards = construct_run(cards) + if grouped_cards is not None: + return score_run(grouped_cards) + + assert False, 'Should not be possible' + + +def is_valid_group(cards): + if len(cards) == 1: + return True + elif construct_n_of_a_kind(cards) is not None: + return True + elif construct_run(cards) is not None: + return True + else: + return False + + +def _generate_partitions(cards, groups): + if len(cards) == 0: + yield frozenset(groups) + return + + for k in range(1, len(cards) + 1): + for combination in map(frozenset, itertools.combinations(cards, k)): + if not is_valid_group(combination): + continue + remaining_cards = cards - combination + groups.append(combination) + yield from _generate_partitions(remaining_cards, groups) + groups.pop() + + +def generate_partitions(cards): + seen = set() + for partition in _generate_partitions(frozenset(cards), []): + if partition in seen: + continue + seen.add(partition) + yield list(map(list, partition)) + + +def comp10001go_best_partitions(card_strings): + cards = set(map(Card, card_strings)) + + max_score = float('-inf') + max_partitions = [] + for partition in generate_partitions(cards): + score = sum(map(score_group, partition)) + if score > max_score: + max_score = score + max_partitions = [partition] + elif score == max_score: + max_partitions.append(partition) + + return [[list(map(str, cards)) for cards in partition] for partition in max_partitions] diff --git a/project03.pdf b/project03.pdf new file mode 100755 index 0000000000000000000000000000000000000000..a0b8f0a51c9c2e0f5c660b9525938947db87fa15 GIT binary patch literal 84492 zcma&MV{j%;6t5ZEnAo;$+sVW>-`KV$wr$(i#1q?kV;lS5t-V{ddvDd={?uLl^>p=f ze$Sy$7MEmTVdQ|Lm|q%QgJUCRCI*<;!143LG0B@dSh`vfvvTmT6aQZej!Dwm&ehzR zm`T#k*wtLz+!SDD4ksuG=i=&YZfpwO|>IqAPxf|au7lc6Fs^uN^c;D8u0Ji^Wi98 z2=Y!e+#hAk#>u5S!ReAprb#;NQKPA2o&NhaulMb#7DII6SXN@_qw>1?&vkT{4Xnzp z>POAa)kj^$b=ps_SF5zDVYFFeQdB-9s8bgw-=cdNiT7KI4uzRTL{0Eo{BSc1Ap2b@ z*+U#x`9bvtL1a!Ln`@L%GlX6^$BZN_KT5ucn-1qS6Cu!LuRI#tUzrxiN=-;b#)tyh z5#wwW?aQY#I`svtZ@~w!Z~F?h!}RN6%)~!Cn?>C}i+cPdf?@(9iBYp*#p)69>IFE> zs|>AjhRxs3rq59N=-?^CmRvQVG<0USV0aoT|7oSQwahx*^D}*yoJbU2SzNpfZ*WJ8 zV$_5h-Nn`*h4v?v@2)ykmQ84K$pjNl2remzjdx|Yy&Oai&Tt}O>_>IKV&tMtLTC>1*IQaSkyha%{6&dMMxyjf7fp*kPR773gW@<|WJaUONsXdTBfL!n=Oc?I72_VRDK z@Gjj&47c4hsavV2zJiq7mGZYE=G|B`Xssd*b?TnFGS2#1T+s8ECBkT=Wel_5+`?Pg zWfFh_Co?p@CZ^2wEbW5SEr@9-Vv9w0+@ds03$f1^-XCed-!l`*AG#^@>V&aI4qX&R z%Hy%V#8ZSr2VJ4Z5ShB73EFHVr0sYABo+11Y;MJ4D9({d(Z>28qKc~cz`DB1zMJZ< zje-iJt%4$LKZ+J@8)7JykM*|)F1x{UA6`30(@xN*DZUDYo;0x4er~4Z3ztKb@5e-7 zIOONorU+6ou?o5lg4A+#p?;sHouzF^tMHu>9>pyT_!K@|wM2ZkS;0ZDb95XldvDpq zf_~}WJdL#|jVDR@W~6@MUg1GBzBK<+kP?b|>6!2D+Gwdj8<2J!NZSZ$ybr17i!FmX z?OQbmcsh#@9%=OJhAg6qs)QiLUm}#ULXd>hJd#{!Ht*@stEbW0I+Oj`iM2l+rFwrpvHq2$dt%T5 zHM`UPB0tgYo=cvlT#aG}W)DFzLRv2&Es3OXUXSC4jH5RolSF32X?}~pvXGY!rPGE3 zeoab%XI_FIeWYisTEtAxnFyPxVp8;l#)h(GA(Ki+7EVR}aGGM*1~W$|v!ff%9V}mX zXc`K=@88dDJhZ?%*K-p(%i4l-IRA@L?}i&*Q=(#dW_^kVRA58qkODE-UV8+t)`4P^ z;-t~rSe0C}qF)8u^dUKWNHGXB^AM21f~YGe*(Q?;jWujbY=Dq*sN60-g~yeu?|z zN*y-Cv8$@%bxa|&QgnQl^dS^mZyY80XR{%63Ve4=PkhUk-@A4o5|?LGKa0eg@*DJrh`kT8ka%qH-_3OlNu48#7eLv=O*Ytj1)vw8Yi2Kn2-pJ zgm1G!GKu&LKt-ztOc0ZNb7ekO&VKVV#8|R5MVfoCkY*(MB3#Y^+}5ANr#_|`d3}$L z3uOAze2GL}%wy5NPa4PFO*`2>i(6PHx0$ke(Vwy7@>8(1VFbvU%W1+23LQ<5gj>

W+A$&8=fRNP{hYlmBF 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

    8T z1H1zUy)5aa-j6`ev;~u_AT^^DL*6lmPf?`hfdk0doC3PvuvUAsSwZZ!P3D>+e>dou zH~pl}IOrSQ#B7~RLeL~Kv=}E;12AWJ>f2)|h!Wy&SgD*-L5vTo-SD~n!V`-ff49Ox z52+`@T}L~o^(NIL%*T@AeVg41MjEr&?YZim$2wRz2@o7apgr0f01ImIO?8E^&%yYX zg6T`&2(N8~Ao7>4vs0<>kcbOgF=%H~G8D27Zv|=E2$$Mc&)9(=F*Oc2^;y)VNAqAE z^l-b`RO7N{(~55t5bfIXhW^d^56hM6!}(Ii`$$Wf3?=1s8}H34^_uf7u zABR)^$849_GojlQdgm#APCUmRrd%Xwi@r}}YOSGqN)?WDKg#kFF*h|{WHnn13182{>^d)?(kBHEz#&o-#dk99d#fSoL_Zkn=9Zf@bRq;n|iwF#7`S$V+T zYWGRz=gj^NhF})1h=o=vfpS$8-&o&cpN4A5drHLs&N^<2_dMHqV0{_;pvhh23m-F% zIhRe0Oc8lTPgmO00!z3ob#-|!(_jmaR$9~%!SI*)fmc?zFX0tn-Af_uQxj~s0$12@q>HsE8am`d^okTLP7KT zCDdRz*9^XhWL7r%i@q#R+fYJ{VubF|)W$b>`)=rkEV5P?9%Y)u7kD%13K9IIr2x8;CFMw#2lUblanu;dyejP+q z2|ClOg>$2KXAUjjU{TM+Ns|=We7kWJuC_oWfl4&KLVG#{gv)Rww#lOzR(wL%<2if< zpZYG>1pQPj+u8cj=tAB-gy+*lE%}8WdlMcK;jFDw5RfCq3Xd8Ff7#CLiId!+%U!Wt zR*&tW*^Cwa7=&md(6V?|7Uw1ewd7ag^8mw=or;A+x;DBu)>mPier43Lr4IYevIL&T zQ^eyb>9AIk!UepHELvB&cLSGUBgVo(Fkx8)C5Am|oIYd3S??U%I%bsoDvywm+^fz{ zNs3oibb<5cYI0^N-X(t!->Wbqsn$Uz_2<12idOzAXnfQp3%NB*65`?Q+70XxF69B0 zO2$IbW%fzdvfylEZORA(kEA-|bM=W&YbU4NWw_a0Q;l1Zrfy8pb(@yON(86BH;DN> zsaD;9-v3dL)uCh)A)ki<903_DORl<jfx2DK)g>2HdcJ|G1 z6Tq{^2b^Y}6PN3=fM4Bdb;a3!&&;-usr>s_pT4XG^O@DCo~SwzdqQS|&Gx;%Ovj7t zE6r|P--Qfg0ayfLQbUJ217Fa33#4h`&p>v1XHpjD1$E++SZ9~d{*K69a)gMKJDX}G zs=JVqmaQq^`@J-x2||E29b;}t+N8az!xbYVFEUCN;guC|U-ryFBcwuTla&MrNZ1k{ z|Kz}g|A4kkwqqKnf%rZPBB3VmJBU&CGf_AxG{AasOdfmvvd!dr?&DSS1nS6&%Hl7b z4t6HBVUyXKzYhnaWO)qRMPRq@cHxyCAx7g?f}Nv)e*%FCC8V}N+gKaidpMlB)$5|A znDC7`Y-o_lRZ~(lUR6_u(34(V2LIw}I(PApQ_)Y!t~5LwV~Df2T@b|G5h82xW1x%wVeFk^Lmk#w&>P_uJz(=2hm4T;Eq_w!Xxu6;hjH-(XrSaYc|Afz##ilaGBw@TwJYe3reSSQ_d z?Wt(@QaUD7qy^Rtcx3WIyL*z}Np&SKFUh$n%1&5jJT_aHe9EPH0<)ZAS7BDSVbd>s zp@gJ%iy*bAJVd8LhRQuuaiju8H)O5+HWqZi$N&n5MH^=%*sLisfddOaA_OTuc8@KF zlxL$RD`Ha>qOGxfL1m_u0QpSPg91YZv&5)XytHIPa!;EQW^YFV*u*CVsHFw-ZO~{&!MZ0nxs# zF(`UPAM&)?4ME`A7Ie=}?y(>+e0MtPpZH}!*O9sM>p0|%X;^~Hh?bm}!-{GvhunC< zH5y|8v9IwjDhaxS#Q|mx5{u||r&JneJ_M^ye6$>B%TWO|?Sf|N;?$4tAH z^`K&x2eeq=*u8W&xL4B`iz;FD)k@!QN(;qKaxtx^Xo3h7)3G|>sGtQM|I?c^;PS&N z|9c5-Z-ukl0?glJ@J}_(P$EUPoZ#$d1A;qwVoiT7Q}yy%X$9lTTaFetdiiEw6FX$Y z(1kb0QwVpltpmir^qo!cP&BEUwvE5^h?uvh83ak|TlUfDUAWKztsPog@&b$_yaHJO zl{;$0bxAoY=CmRlEp*?^&gjDE(V7)#PMxI!Vy9SEatTRWJ-hQ2j>(Qcw8bsGI=|{y z21H-VMT!AN5({KC2IT4UpPRQuyC~lzu?jhfN4$8)rMd#isd?wpfrVOew zI$h$-a!e^_5m1&KwX!1R9!~N{AcF0;=aAUI5{lZs^d#2%V~!d_s@@5nzJ6Le1~C=o zt3;B_3w@p`0$8l_wkQgPV#@+y#v{2w(R>N z7GyD&w9r5J3NUE2S(C3-Zpz|tw-KPmAMGE@nVi}s{a*+)TWola>cVx5pBal0PWz!x z8QAD$LT-H6=Z#z^mwBi_>_xe8kreMqn2ljf=-*`O?8N2WN95QBu@?<<(zHn~LXxv| zZpE%Rs;>XevEF?7Qxy909eZ1&tc~dU;BnXhpK@SsSU3+Y4^ef^rRixl-7{b|gw4uo zhquhsl(o@4lEgQDFOh(vi(-VHb{Xnd1(*YE6!+Yn8;&7J+N>Afv!K%-EV0roUyIe; z^N{125M*xgrX*AI0QVy#Jlf2kmL-`D`=dY|_=A%HD@T24+|O|kp4)Q~w^hD&D=?vq zGgox7uEt%uem zh++q~Vu3_!2h}5Uh!s3qMuJmGW3(o5^^ZqBHy**dNA*K{xCSj;9q#eHd2PX+*M9J^dru4LQIIPT+F|0vSBnm^V7F3vaViTU*p+EOkY7N9;CDPTVV1<%A+So}G%C53@X*oi()1QOFtrnvm zP91POg&!pzkbTd+50cV_zVn+Ve^9J9wIf$`8MVDHhTsGf6&o;WXr9b^ImEkV30d>S zJP54#oe7T+*t&cPJ5zAqXm6AH5-ed~EhHcwSvyT?5gcEXE_I?5vpy!FEp z+FB~qNdV0-u2T>idivcUe^Qk6HU?%fR<3C+>ylVE5->8?%QM0S9$@;@!)>`&u=oV_ zy;X1wRpa4q%?m2ByjIZPyhG?lZ}K3lFf#CI0ozGMeKY1;ewYItC;LJiqRoUExLYww zE)O#a_3jdZfGUN?aC6BS0zx7p)WTe}VGyvLeiFVd`ZawKn+1Gb^N7z?ux)yvut|(eETs+2vBc?IvX)c1pknXSS;hF6Y(tau`PFZguP3iqWf& zki($5T(~2t@F}<%9UIbvhM4cl9Nv=R zeK_G_%rSSp^!0H|ZU90AT!b*Ubk0JfY$+KHvzk9{=;Bv?Rz92&8SG^@?c8Tn6VhcG zuM7R+0Dp8p)AB!-tpWWBuO~qA=~XZpkUjGiAVTeRFQGzx0 z*v8;5aHYM(w|D@r;bVF&+G=hKEY{osoa#V^Ak$9EU%JpW?BTPf%k!h%9W?@Tz#&y%PCzMkRL*RfBraMyR7 zzp8-OalkN~FhFKSQ4@d8{FFvAT#l2 zuwuXTqoyxcrEa4|XN9xG{+w$)4(erl*I}S;!Czh6luK>{-pOIC$T;fppBa%7pEU@9c5p_hAV(8NarCOuGOVH{K760`h zkG&UG!l=e!MeKJ5iErgko~rg<4;SDwqXy-51wIww)dGyo$p?eJ*!t$hDYyO-$Njsy ztQrwKjlDw@F}J3WrHh5g*2L^yejGAtOEq$;!WHqovra}c>W^rnM2puz$kRWd^Nw;e z-?SPYFZONyK`x6>H`78lnhhye?nwFOsdyrHwIfs)nw);zsuv_X=d%aL0!{TV5 z-5(bUEmoz#hl`lof1XxHh|LyWq%T!G%SEV`9(25wc!_Shk2FtMLe;LOwU9|UDmMIH z`A^o=?rfK3rrh}nGQj!CFtB)8P&>2;wG#u2xN)_tg>dcX-;_z~dQ@jp4w+=7U>4XL zO5+I2^RAELs=Wg!nhnU_`8wRhkftTI_SFgZZF?%mV~I}WU0ROdP+|JFU6r1JCVO~- z?NmFSz-uoC7}o?m$HjaAilg|wZgul0bd1n*rc^_j z%}|}A^m$J7^9z!<_l}~F4W45Zk`L-XV}ESUr_*Dv%$V6mD<|~1btl(>$A8g?7xU^6 zAA|usCaqi~?k!A?pHa0WjA_k-gbqaZc7VW!EpdIM)OotV{_Kc$44OPb=KOlG2#F@*kepp^PBKPw zM4sdqTgTiy%&18RhMcCHQ#gAyXJ3m;d9HK06k!pQr|PFEjmoiD^ChLjUFx9;&2A-A7N@E#I}HT?I50VRr>UoNZM%;y0t~lIn;3b76v< zt7$-3CQY~Fu}(fPIa;T^-{rVH6J-qtGa zNmy*PGRjk&T|;65KPGyI4Zibx5d{^c$w`Kby5fTDOx0k!OA+aTd-H554ekf-V_7g6 znnB~pjun`%|21hwVBqqxvz^)F54d8|LrSomNB)a{&vxl38>>hf406 z?*lZCwi8bkNDp4^5hZZ3EIfP{m<_bjq9-aWqd=()bduF5`NSbPFZ}1{Z^zRrH$5EUJ`~eW=7x%6BgbcxURyaYTJP+t z8QCcx9^%+F94=ibWPr|sx7TZS-~RS?mn>FddDui9VTxm(k!%6FFx!L|a65m{7x zDv5Z|k#8QXIQYS7eLh9cm%QCL^_+h&qVY>ueH`4TfhqZ^q8MGuhoL?;9E*m|debNk zzPl`*>FC|q%k%22JE*ag%B%0+(UVJGf&*p|yqMc)b;6gjDX8f68J^_2e`np&yGxtj zg#DFHLFB8=8^N*%B*PdfL(qI$E(Lr_r__+IbWwFKd-zfEK)56Mu8{89e82MHz1+$k z;A=qx-E7>!*r&$eW*XD1jQhm7hsc1DieOWj;GqTXAJ2RgcGd}IvU`yzZgQ+1b`ecT z;JUJ>O0M&4L9VX|lx={fCbC${X+Q(1A`g+TFa6SEsd8+tE;hDPn2z@y1eN|-KrKh$ z;(RECmi@8m+lxcL>q;weJpV2q+v`vv%O<yrvh_}wP{heOg z;Ztxiwa9FG^ideoGr*UU?)?_sDZbUfZ4ffhd3YC%2P3$ri~mzz+eb6bYuFWET9o+{ zdr0gI@BAoYOU`$5cw`Vs?`oB_Sk~SSHGe^M&0S?~{$(yIz+!ObI_QNeg%Q2{MoXO6 z&n_rU%(Ix`)JJ-ucK!FrrB!psIb~y1-XC83DdtdYva6MAb{@!eSPsfv=-PxcxH;fP4$p{6>HOsrNOVZnS1I z!7mwYJ(fhGY!vaOO)lO>S-ZjWQI61Jrl#3rAysJj*AN#)J`VdLAP<^l0r5AO0F9Cs zl%yz^9&BSmx-xEgs^Wv2;g=~!t#RDqMcnIi5M6oXH>#3j{h9l&SAs%r*uMWI^jp|f z;tx`Ec)pYQZ@F+6%K$^U=|+sfcI?e}c_bcfK-5Y%G0KV|h1R?D5c z6Gz~Qa`jWeykN{2x)Vd5B_p3??%JHzt`Jl={k zLAUY>K}#t4@M8YYQQ3;DlSf@+a+vV^n154vr!aNgqOmy&T<`=xUe}rNhPfI(sx=DQ zF4A^b#R197oO!TEhdE2&--tXBhSh9+7vH#53%SV>dDPDQ+P@L%fQP*1?`-hef)w)4 zbB3@+_JZF2&-{uL_5Kb-%bjoy)71oI(|iddlCm=S^XeeoI96F4>n*=a`_5*QOQ`lSSSFF&hhto^|A3*z(fO8r({LL*Cvmy$BQ zX7M65iWb_ZDC&1?zuRC;RqlL?*wy-FPF)GFVKD!`W{Dc!uq;Ek$j06ESGn~ied^jI0d^jvu+QR4 zO4$h6dg|zX5(-5rrAF9btX+O{XlBp9%;wZfI>~;KFC0ndloro4je+K|pP;<>)V3wm z+H@f-YQ3wRlFC2`=AxO088M9J&A1y#5%)PWyuXqKj$uk*T$tXGK~%c~4~CAW`En1q zB+*9ElY4F+yIHsg2zL^9>DyUz>t%&F7O*pn1hZT<4=0NH(XkF$M0+YM)mHJp14I-; zRBtu0FRMFlW>NtaO}r0X%R4(@riNXnJS=Gmmc$iaoeLARJJ0Iqe5ZD*JN5OTe= ze_2|{O0&pVB>6e9nLn^c(D`PuCL?m=s57{bt6g9AGc~M9bk6aOpm+ePOF+kV08JAT zTXARkJUUv)#?4$$4np_H_$1P4y(_n4xJTHN>&T-18s5@^b!;cmjotn{ug*OlxZEbe z=?x6sxiG%PB8xU6Vs2wHsG7T2m||hgR4BjvJ1p&>53gXm!mV%8txXI#6>TX-c6qyY zFq$u1s@8XEZ{hb;c4Yu&H8a9YgJOPEf_1J9g5aVq9?Qa7BM+g+;Mla)&w?LzxNT=M zq+)-Uv*ghEl&Y}dyy!mIKNw#l1L?a1p$^!nw5%YXBDT?Q9~BRe(dIRSxFQXpf_pYx zz~(YfV5bq08hn(O+W5hc9hBCR&-E9v zTuf2*zm`~XL&k$IWhk6(vkRU(1+QG4xGRn~=Az%oE|CB%OJUH<)4BfOF^dRM^&%m` z6NBd0CecqOBM_e?SpTHytDPJ;ULUNugDJ)qZ(ubj*jS_3w)qmk9zBjlFMuIrcu1fx z=GLN5hBlZbw+=G33c7*TT&7ZTy+padd>{l`HL_jUhLY5 zPLA0@+*BP>qtQ}kSno}*wX#>KJ4( zYRNoNI3oyF8ktNZk8lZlHmKfiUoAtr?Lq(mB$bEJ)2ZvvZ36l&{m8cRhBp{rMQ;zk zn5l-da5OJFKlUv5WV+N@K#+gfufF?&bgzv(Xpk0Q5>HJhrTPz>Vk`_h%o_oM%6vlWUySXJ-WE?#zuAdyn|s_W$4Ko&rHOf9vp(!Zj z_uO>wM?2JvCtUEjH8EOMLC}&RuA!N zs$PS&4_8W%$w}8+cOf}OMI+kREZ)bdG2u&wHRERlDvKHC~I1w)#p%}GTJl)DAMwG_^pk{*kM zMlH94&_DRgxjcM;B7Ax@tj5XKE0fGvkNkGJCyK+L8zeV-6!HsuTlBWhfZAy15d@&c zxrpxH<$Ek7hZtt^{PVY&7t1>TFcPGpxvOn0EtYNanxFV2% z;to$w_Yr_F&(SW{h78&aCG=cNSFKJK=nHg|B{{^zqcN@Kn>2G*d5U?;9UHH{oU|$5ikZVdBj zB>=ALfB}O2g9`ezoz6Or5?#R8fwpxC3C?vfhOt2$zF{2zbqFQU%ey{z*a0r#>;*Ol z72TKx2mus0AWi{)bo+C5@E*zt)JYC!hfd(Sh?fN0i?#(N%Bi93(^SO;FY34yV_VDj zI(7=&7yu0Y&LGA7d3@Xcf_D{l2rITKv~vT1K8StKnt}uR7u?n|Xy3iMyg&f(@9DeNhh6QZlY_jQ30U{t!F=i>wi~_i>;G-E591bX7xf7KX%yN?$=^k& zheH8%1X9M3?3<5+f)=K$3H{{Hq8fXN{wID5Z0g#G~?*gx<~^D9@% zKk`I%VNp&&!#VwI z(;_ISXMkDAyYF(Gcn+Rb^~jK$N!XAjmKTA$cE!pX`^eXu*CU{K+N?J2 zORz%KAx;~@>K0M``0g4Axovh%ga5_%{j1^|p~xvFlbIVXOmsVSo8Kdh5c0%0h^GQ< z$3Vv&stcC4+q}s82EzkYx3JgvRvOW}ypLidf81lWrutL3f}-SEbjUWaA>nl8RVR;ZT@ zN7Ze~7}uzMpa8)AZS=SqRhbg4f(oQsMGLO8baFJT0&PRNgQ zwATdZ?`oI8Ht^lgB6=FCN24;m@zC>}N_SIM;A=K~R2v9_FQu<+0zcdY5UtBvk~PFo zjY;S`&~z(y3B>#BBQ--)qqTjvHNU(9d=v1U_U^QAx6VDos~!#bs5H7c;`O{rK&|on zL?$B7UWw_@$vo;kS>q{sZ9%m2#hU-E|4kI>>8Mljct{^u7CZ<<2q1AN{Rd5+Y zB!Ps@JW!YM#vS_m5X|YBdl!)Ll9lu2)NB3RI@WFo*$UdUA*V!%U24|TV!Vj0Fn4b< z)cNWh`5_Dga?wq~ln*9DbylL>2CHI~dZ{UNe!*c}|21JjEVl0|yQhIx3v@h-&sZiq z$#?lX%OHc%iD${z!%O4Fn#{P-)W2Q3gT=ECFz{w}bX`%ac5wi9Fqa005-#1$P<&wl z$`_&@I}uq}CS@4@tGTrsSA1IK=`2cX=UJ?#_1LrfDx*;(>=w!T#KdWPs;}&Qvr)CQHjL4n~hZSlD%W?nQln>r0= z0bAW*pNFZ|fFRt&B}r)UU6Z@E{MyB0>)^oLuz@*oEFU&{(R6#TRM~pKB)w1PK?{87 zaqLIbu`UZ8sM67L$82`El+ivCAtyXepb{ycVW&i4oMXcSt$!V`WR6^wo^q9rG&#))rn$F)a<+==X~^xac> z&v5|`l4lcSoxC9C*QOu!j`nWsM3rp})uqkAjf>#4gH`G@)La8T8=0wc(6*e-_HXUd z9esIy<9dx>xit*B7a!m4R2U{TG}`|uynxkL+w zBx}u~nyB2jEhz2(DNDD-apsaerBQrb7U>cvyu)5ebn>*{s4G;m%tG~QSuHmP@n+Y` z5ie^0o^zTwGb&6ptujU$uw|3S^cA)A{((`~ylp`rPMHRWRGO<~Z1*ybc78eEm!!W5 z<+1CdMUR8=d=xBh?QCiLX|jadhMoT27dEj2i%Ps)`~C?4>7p1|xHNYu(s?qR5l;yI z%6XH1kbS1^YsIfLfBh>1m6ziZ-;ck5ta7|I0z<8rSOdDrA;Mee8)LU4cCeI^!2jdGB{`0(-+L6B(L~!w zChQ(3i~Ub2uZ?$SMD-hePa(FOWP6+7bAV*uF+587LtOH0vdr6CcuagF74c!AIQB37 zJ0ZMuYp%zL-wwoBSM;m7;wilGIOx2l5?dsOF5o;bbH?!m?2v00G8UwjwOEy!#Whk=Dx*9k^**hxgu7Q z>gRsoJo^m7wc{DKUP70BLHwRwa-oaf#HOjQ|QPP>c6X`jP zn^qltz|N%@ssu`^UeAcN6VXQmtU@M5p|aSHsUl^^slQ@I3SF*-J88pEQFy3+s^%N@ zrHGlm`h?-u-v&9mkAjl>2>q`_vw{KU?A|Fx`wLm1j}9j^uydBjoP?oK)=_tBC{Yet z?BljKNVw!hgV?o&j;*oI%*HHwJORnjL}@h)k;^!~o|?5_VTq0UwWbR}s;rYC^2K6F zgc^8(UUg2olu|+H0*{s%PJa=Z2LnZ;M$>f5vz!mPz?q)*gLCkPi>Z&wq@c5*5|LAQ z?||bj1Iuczq_xTRE>bAwwymqB$u1|Ch4M4vz7Iy5_?sAd$ZiOgK>$5!&FnN2affvlq88==l5#tnR7}5?Ok?I3XRkfG)Bkeb!ln( zZH-@T&bRAp68&nHsz5*y6b!QrI!HduygL}!<9b^bvj^7v1#@RRCvTWn_H7g!Y-SNg z9)o(V(n@!d<7CNwb-EmN)>CqhLZ)uWH?uLApv7tH3{904#gqM_v6hs2+>YuX$C8{S zjGuUqY4E%_kTiU2GpQS-pE%lZ2cVq}m0vt%G^1~-Z%Ej|i6#hc>BiW_45{f6@Bre*WXz#yz>J5Jy+k%zkA7SaY$OD4_~6ySbOMC3>9tO43Q+(L?nDslIE3AB}Zlwlr8I=pTpVOa})d~ZWM6VPmjNYnz|XP@$2a&h2oWQ!QEUK*+)knMjs zFnlbiYoc@<%9;Hf1B>~*lMeNyP9zdOu^5I|jPB1*cfT(O+)LScdMIhMI^;s5%|)J#fH-MN|ht!w(6ws1YXkM`tu( z?>cRLFcjEfXOq}=hpVR^8>(|@B*vkzcPlH$=$B&DhI$WI1eWq!Mr)V`zNJo$FgEs? zo#yHc_<7*iX$d8i#3kyA@EDsXTOUZav$V5ZJ}`Pfc3`;iOl`y*(`z^t^7aD-w=p&#JA)?8zm3)7wd>tnGoZQ7g2+^>r8!Id{gKRE@akm2$2^%jA+AQruqsJ|AY1 z!B0aiBjpwKF)bery~Pu{88<{$+jfus*vj-E=V@p;50H|?mUVr7@vTUZU1mx)H8bv| zFnaEy8$Bx)dCQ|5Xb=EelSB6Q4d7x))YCfJFb0L-hOEa9C4#@KnqN^vE6<~Yl z4i+!=wfjRIr3zMt4bR=PA;r|Rh5@U*v(IfWU0f=^>#jE7GKCYQSJau;gw;rQ9o3Fv z$-{|$TV<*0QFWQ~aubf9GrDa$G29W5+CJTmlWmN8Kg0ccSeEw^#rfCt;%5TnO)Z!a zb5>vvG*=mz9vs8W)~gtf;P=Hkm*Zzvj)^7>;?Uts8S(n;`^*qM?--liHk-UwowyAl zAL36=A5LckSkg!0eDvw?N^qG1>%8^|j-e&p*K%h@QEM>&NwMcdti9&bOhQr=OFzIH zVT8oxapm(-t*lA3?zw#CJj$&{dQP8NYv?vS5gH5GY&=VQUM%W3=RDA+s+;$#yri3r z(CDo%3T*X0)-WmLf<-ZR|L6Dn%267SeHAqOC}w%}%5fh|llQ8(i5EW)*nzH7Z>KZe zJ)_}#)XcvZFVTU%#CEbDtLe-re?>62^qpH3)2EplWxhr1vYy@VdF{lTySZg=#$Jp_ zYdZkWyEXje_L6(2ALGi}ts=+Vk^xqV|0oe-Tx@EHVf z?zaQU+PJ?FuMW$nh(uE1{KQKiv9IY@$$yHjF7K+L$+<s z!`(f4Zs6xImha`0bH6G1sb3ABQ*L32*;E{?^C{zZ4m57i8D;Y?%|fe5<5S+Jw48X+ z%Hx0C5u3i*>L0mV-lqPMEt17&AXVja*{%f*E5Ia0S26UpQtur2%P{i{wUi1e&ESO9 z_j{C|K&={{y^4*}lJbr>#Sth;be_I z0an4vWeyp$pR1QCAQIrfU%!~d6@92W%EnJ8~kJUo}fwLbHa z;TqMTwJMqK0pCT0e_!fhf7s2JzT%^QB6>rgc|h3U(Dj{X!eo!M=qO=8hWc~*xy%c$ zE9fS>lB%+zDh-~r+&(u1ax*-xG{=+;3Wugra*i(3dNb4sMBM*fNV}2WH5&OzJb8_v zY5^CF)66&0 zv~soy1*zA%@=StjWTu8GTKXm3R!e7dc8W|pXML3r%Qu2VGjN<3H5A?ELOSA)Yz(#o z-Mgo>&Dm;YN}O*+w^qy~ABbdhmbJ`G9z_eaoHV~?OF%cKWU98n%KRL@hKYLC#0jEv zA?YtgD%B^tzCr!MCYp zTndNNXG&ai9)?w{fOnurXZ##q;yMxvXP~tmtoC#<9Ra9l>?Otx+>93rO!ue)0?cJb zimzKe;u3!1R#Q6PmN4mz5$3wV{2~9g&5_#30)U9@*l5nq6xShU59lok+eHT;*vRfe z4@~?m)5ykxi*loPpcQt4Xi{})#(oLgialNdek5L6<#RaAyM!nDOluvRKB5l=DMAH_ zuw5Sdx08yPTVh6PTc?rQEOrL}KTAXdnVPVvi>S#AV`o+6kpTo8z zaOol@_!p@>74HJ?Kbp29C~G49k)3kj?U~KHw-o5&VhS$3n0jjI7vGM0Rl`Z7POYem zLTDp@t5U*(DJ9xS%{MO{l(2o;^}n36t?!EM471zMF1%)(o(|KP!?hd&n33H$(zbva z1WNEELLE$Z-Xc=BKNLfJB}Wj?`?H|+U6wq9l7gOzH`R=_OWAIhH^T~lzzlyb^?WMA z^~66(db>ecjif<--p2&+KS4v}iWk*gLX*eB8YCxPRBKeOLRD3Grb~i&x>J1OCZzG` zRhnVQVME4;n1}x|7yjvAc-UBRJ)R}JZlGRb#c;|O^BLQER$vi3hWfRN*tD73(6mi# zYZKzIA%uB^Z@Ik06t(o>H<-D5t$5b#5or>AL*#gf;ZzT?A=B0gE275hBzYpsW`Zwi zvtFZIsyE>|H^64?hi6wrvep?whs5@Xk#enBCECq{&*vJ&z*8 zP%uaV6d==9M^4Zm=eHO+k1^o;u{Z^I+W#a;p)QUwsIy;veIbD*URT}))V&HVp$QIVckT@Qgc<#Do zRGP87jUKX6+?QKMln@J-o5;M!X+P?IzPH-IB7%$SO<9!yEjg-en9h6aer@K{x&hR;08ziK@xsJ@jO9SbMpniC`v3GNi7A7eiDp&0mzE|r! zK-^VD)UC8Irs@g4o@D5(GQI_PY_Zl7Z8?gTm0^C|h%nUq+X+qedB{mN+9B9Bd{gq; zq}Y0~W6YZMI`DtkK6`T?7@1~XTmClN$+b3BLQXKkT zr+foQrCjbou*T+k&qoJ;{fFcmrVhulsf-ee zDckX1d3M1}^J5AIE+MVduegT#1pyW`!dAj9bj7}7?MLu!oN1UY`6VU19b*Fa^CxW^ z>^tPH8DV31ho4&eiKXF*&Q=3M&muTBv&V6LrYs5|K)jgBnZFLE-g?9(2NI)#@T`B58W~>UPBhk_0&v8 zv3-I*qpUe^JhS&%@b@RrBM_no%zQdL=b^Hc2o(n&L)M*x&EHi1r&pGnAC{0W>Tq5CiOt1Z33ITHvU{1-*nAV|W4dj$LKo({%;Bl z+(LjAI;e4LexQq#eMOntnRRG5?i`1JD_BlUZrUbqX+q`qrFT#c*-#_5JH@~$_1=~M1PYxUV>SOU)m zT1)6WaydKge8@oil#>sc>T~2MlbzX|N{M8kLs;clqPpK^0yokJRr*ztU8P_hKE7ticfsoB5H&(TA~In1C=R*qMC)$`yIBpgvb{6m% zff!SYhQ4tr&ADziIoT`{+hR*6yxfhq-Fekp*hFHLu+QWpj|I98F=fVxzVWGDE@Vhv zf`##~lB5LnNj0$q@^q%!MS%DPZN$mi~*Iv+)oXl3Ibw34`4|H*_3$(EY z@oDcfmIm#d?-LouSUdGjyzF5zT1&mWl3_+olY`^;XHGqahoNaRIL)^zoj=`=k{WCa zFhue99B^;ewjakPlmK@_8^Vlmh|c$_De%Ybt`Daub^>g9@S>UJ zd~wlNeBZfPhB=)P=}}cIGK!bt6@hEJN3}oAVisP^+XkajXge9IT)WyoxxcEBB zA}303Z4QL18^|i;H-gW@N>bD5u-K`9mykKeT_YO2ubg6V0-hP1wrQ3ZXP zrrvuu@I3^|lpSprT@{L>Hs;r4U;3BFo(LGLO}uyGU=XqpS8R@A450RNUur3O&3jwZY2$D zZ&J2H8*$6QFnOl7O|x5o;|Jjv7bihOKJ{jZHwwSdphAzx*a`m^ch=xRGFcVJsZvPo zBp!lmo4o)>#r<)n!~-#CqWHP(#&jo^$h$wF=8(W8wU$j|9M51j@e?p#vE>;?FZfX@ z@FE}{arFWiFT=s6iFR3;pD-<4I}2hT;a=lliWx8)6M92o0@%MPg+hZ)H1Xig(;D>t zeL^3Qtmdq_BB8@|^>PX<=n=XBkbcE}XUvxCB}ie%t?|9rW=FJd%AL z{=a}19RCBnP;j&}aWVb}P*B*L{82I0pk<_EVW4B=q=cdu{zp(a+x>g;@AiKWE$nPX z{&5xr6e3(q42+x%tc(nd983%>oYagAn)<%Z5w*Tox#oWS);NSIsd!ivwGj(+O_i6%WIz|>oR!$~1R$3-Hw*T(+ zzd9t4v2Zmd_)k;xCZ?|RBBn+bhPIRhR`!O@=1!)D1g`(j6l`?=CizbZ<$o{{Q(Ke& zXwljK$BL+U*qaj2%NtoLJKI3f%MmdBv!aVxI665KFmnFCzH|acRuRAu*vXjd2AGs}N_RXdyyl#0>=sN*x4cLhp-2_xDRTzj6!Xc!EyKGxYS{VcpA|$a&4GcpRS3tNT zLP<#EP6dwsMK}b-(bATlox&;o*NXfnllWG1`n=?eVwzyE4%?_si-ft-o@M~$J%`Mf zCKGl)gf&2}L5^)D|J&$o#|K&HE|~@#CHKeASKnW_7nH57KrR7W_uwkD@l#ct*g7M= z9QmhRQLRWTg3UXKP8obD2W7iw8Wl?QhS5G)E0lZ5*(;=vs;kJAdol0pq$c>iKm}N< zjQJ)KJuzQcr>#iQXY9fJnig#at>3Da-Nh%axSkiq7~V?#zAM?Q&Ds}M6FSSf_Y^_l zeQGrK106S_z?65SSoF{Z?3KsBXDs7A`T;6wZHow>1ISPN>`uFQ9i$i5ZgyQ ztZ7q??K4N+scUcGUQZYw0ZfDEzjJmTUl*a}4(4IDh)SBTRH;HkP8#q7MWsQLe1VnX zoG-^`zh4~xes-3)#egVn1uzHvpIzVk{`yp&YnI**e%9qm*xb6d`i?e_-1RH`x2Kwx zCEj=J+4Zq>n=W^C@d>-AaI@Ud)bAS|FI=4QzCu2Ds)x(MLzWMHvi5&?7iN9byYHc6 z+b!lKMh{V} zxma>=DaXOfOH!UQ8}c41d^2rIg#VhIAF^(E2fJ(4Ime2-*M9nsoYs2# zFOhq~_gr*E&E0$xegkREliKO)mRL1iy|`i9m0j;{Bt6&I8}QCue*JZA9xdh>+MZ$R z0n@qbBiAoU=kG!=E#1(yvY3QyVEsMsi!vsn`ws^A3hh){{EZaZX<{P z8j>Q1LWIj|+42s1-d>}7;_$}y8`I0W z$<)1bPbN&^%Bc@r_V|3nwMF`$P2Em=MW`PZ5j6|`RqtrO&&uxpPL?m->tAnp{B?uu z=iNOmv`!`YQRYRea>r%>Mg$Q~SLZ_vO`}9xm8?rkQo!!$xm$ zk*4hE1__bbZHbCadLKK!PI7wERei)%@U@i7jCV~ZjQ76|~MXQQ}p+T+_LQ7O%wMoFf*r-EM2(`R4&B`*@J9ryiR4zU133sPJQA&_vsSiT@5T zo$pYSRQvWR(9ZF@#b;B&%ntug$sd;XQPTy;5`3!`5J&S&UnGg;E}Z&|*{B12z| z<<-CZg0)sGk^H-0{uhV+1xGht-T5Wo{h!S%w^G0D#$TpQ@%!azxTNIF(X+wU%}MFo zm*y9#i|n5*vT}d!+Gl;LtDi*g+kd)rQ)b{h-pMQb=cu3Db5N~h>ethW2k-OEGyOQ- zW&N>#qBrwG%YwILb@Z8w?=>sXPrh(ai_K50Ut!6XevK)smR);yAl}BT?W>bc9OJTi z8pli;3zOC~&NOHE=9Cl5m=@N!QZqen?>0A42AFfoYb(htt8N(HjG^uraR4Hb+P41r=n`S~RZ#-MsD2&6nMU%?nut%Eo& z3eh%}#s-##E^dZKCT7N#2F~U#W@ZMaMkWT9&W3Kz&Thtb3WSvaZShIXOE1Y#Ff=lQ z)OAFxw^TiKo0loWI@C-O=IzOHk`)s52wBK?cEy3o6KeO=L|Xo4 zs4+f~Dllcov}K0eEAJl5&9zb!ekrtl>dLcszW9V+Ss(FR&3vlnnFA`uB4?HVxh2*2 zNp)Y=%~D$TenpUtePD3r_xSWQWm%z1AJ6e$n8vdVGlYvv5{pVIihyBiVPa@##-*z2 I>hHz{05k0Exc~qF literal 0 HcmV?d00001