diff --git a/readme.md b/readme.md index 3c2fad5..f3e8c3f 100644 --- a/readme.md +++ b/readme.md @@ -35,7 +35,7 @@ python src/main.py -s my-seed -f 3 -o my-floor | Option | Description | Default | |---|---|---| | `-s`, `--seed` | Seed for the random number generator | random seed | -| `-f`, `--floor` | Floor id, must be 0 or greater. Higher floor ids get more rooms (8 to 9 on floor 0, up to 20) | `2` | +| `-f`, `--floor` | Floor id, must be 0 or greater. Higher floor ids get more rooms (7 to 8 on floor 0, up to 20) | `2` | | `-o`, `--output` | Name of the output file | `floor` | | `-u`, `--ui` | Opens the UI instead of writing a file | disabled | | `-h`, `--help` | Shows the help | | @@ -96,6 +96,31 @@ docker run -p 8000:8000 dungeon-python All endpoints return the floor as `application/json` with the file name `floor.json`. A negative floor id returns `422`. +## How floors are generated + +The floor plan follows the algorithm of the original "The Binding of Isaac" +as described in the [article](https://www.boristhebrave.com/2020/09/12/dungeon-generation-in-binding-of-isaac/): + +1. The floor needs `random(2) + 5 + level * 2.6` rooms, where floor id 0 is level 1. +2. The start room is placed at cell 35, the middle of the 9 ร— 8 grid. +3. The floor grows breadth first from the start room. A neighbour cell only gets a room + if it is empty, has at most one filled neighbour, the floor still needs rooms + and a random 50 % check passes. Floors with more than 16 rooms grow again from the + start room. Rooms that do not add a neighbour are dead ends. +4. A floor is generated again if it misses its room amount, if the boss room would be + next to the start room or if there are not enough dead ends for the special rooms. +5. The boss room is placed on the farthest dead end, the item room and shop on random + dead ends. +6. The secret room is placed on a random empty cell next to as many rooms as possible + and not next to a dead end. + +On top of that, this generator adds some features that are not part of the original game: + +- a super secret room next to exactly one room, close to the boss room +- boss rooms that span 1 ร— 2 or 2 ร— 2 cells +- a teleport room to the boss room when the boss room has no space next to it +- item room and shop are never placed directly next to the start room + ## Floor format ```json diff --git a/src/floors/floor.py b/src/floors/floor.py index fd3240c..a54a4a9 100644 --- a/src/floors/floor.py +++ b/src/floors/floor.py @@ -268,30 +268,6 @@ def has_boss_room_as_neighbour(self, coordinates: Tuple[int, int]) -> bool: return True return False - def has_special_room_as_neighbour(self, coordinates: Tuple[int, int]) -> bool: - """ - Checks if the given coordinates have a special room as neighbour. - Special rooms are rooms that have a special function. - Special rooms are: - - Item room - - Shop room - - Boss room - - Secret room - @param coordinates: coordinates to check - @return: True if the coordinates have a special room as neighbour otherwise False - """ - for direction in Direction.main_directions(): - new_coordinates = utils.util_functions.add_direction_to_coordinates( - direction, coordinates - ) - if self.is_within_border(new_coordinates) and self.contains_room( - new_coordinates - ): - room = self.get_room(new_coordinates) - if room is not None and room.get_type().is_special(): - return True - return False - def rooms_by_distance(self) -> List[List[Room]]: """ Groups the rooms by how many doors away from the start room they are, diff --git a/src/generators/generator.py b/src/generators/generator.py index 844ef6c..b66f8dc 100644 --- a/src/generators/generator.py +++ b/src/generators/generator.py @@ -10,7 +10,7 @@ import random from collections import deque from datetime import datetime -from typing import List, Optional, Tuple +from typing import Dict, List, Optional, Tuple from floors.floor import Floor from rooms.room import Room @@ -18,6 +18,15 @@ from utils.direction import Direction from utils.room_type import RoomType +# Rooms that were dead ends of the floor plan, the teleport room replaces a boss room +_END_ROOM_TYPES = ( + RoomType.DEAD_END, + RoomType.ITEM_ROOM, + RoomType.SHOP_ROOM, + RoomType.BOSS_ROOM, + RoomType.TELEPORT_ROOM, +) + class Generator: """ @@ -133,28 +142,37 @@ def generate(self, new_seed=None) -> None: self._seed = new_seed for attempt in range(my_globals.MAX_GENERATION_ATTEMPTS): last_attempt = attempt == my_globals.MAX_GENERATION_ATTEMPTS - 1 - start_room, complete = self._place_rooms() - dead_ends = self.mark_dead_ends() + start_room, complete, end_cells = self._place_rooms() + dead_ends = self._order_like(self.mark_dead_ends(), end_cells) + rooms = self._floor.get_rooms() usable = [ index for index in dead_ends - if not self._is_next_to(self._floor.get_rooms()[index], start_room) + if not self._is_next_to(rooms[index], start_room) ] + boss_next_to_start = len(dead_ends) > 0 and self._is_next_to( + rooms[dead_ends[-1]], start_room + ) if last_attempt or ( - complete and len(usable) >= my_globals.REQUIRED_DEAD_ENDS + complete + and len(usable) >= my_globals.REQUIRED_DEAD_ENDS + and not boss_next_to_start ): break - self.add_boss_room(dead_ends, start_room) + self.add_boss_room(dead_ends) self.add_special_rooms(dead_ends) self.place_secret_room() self.place_super_secret_room() self._floor.add_doors_to_rooms() - def _place_rooms(self) -> Tuple[Tuple[int, int], bool]: + def _place_rooms( + self, + ) -> Tuple[Tuple[int, int], bool, List[Tuple[int, int]]]: """ Creates a new floor and places the start room and the normal rooms. - @return: position of the start room and + @return: position of the start room, if the room amount for the floor has been reached + and the dead ends in the order they were found """ self._create_floor() floor = self._floor @@ -162,17 +180,18 @@ def _place_rooms(self) -> Tuple[Tuple[int, int], bool]: self._stage_id, self._random ) - # Add start room - start_room: Tuple[int, int] = ( - self._random.randint(0, my_globals.FLOOR_WIDTH - 1), - self._random.randint(0, my_globals.FLOOR_HEIGHT - 1), - ) + # Like in "The Binding of Isaac" the start room is always cell 35 + start_room: Tuple[int, int] = my_globals.START_ROOM_POSITION floor.add_room(start_room[0], start_room[1], RoomType.START_ROOM) number_of_current_rooms = 1 room_tuple_queue: deque = deque([start_room]) # Room coordinates room_tuple_list = [] + end_cells: List[Tuple[int, int]] = [] + reseeds = 0 while number_of_current_rooms < number_of_rooms and len(room_tuple_queue) > 0: - room_tuple = room_tuple_queue.pop() + # A queue makes the floor grow evenly in all directions (breadth first) + room_tuple = room_tuple_queue.popleft() + added_rooms = 0 for direction in Direction.main_directions(): if number_of_current_rooms >= number_of_rooms: break @@ -181,15 +200,73 @@ def _place_rooms(self) -> Tuple[Tuple[int, int], bool]: ) if self._add_new_room(new_room_tuple, room_tuple_queue): number_of_current_rooms += 1 - room_tuple_list.append(room_tuple) - - while len(room_tuple_queue) > 0: - room_tuple_list.append(room_tuple_queue.pop()) - room_tuple_list.remove(start_room) + added_rooms += 1 + if room_tuple != start_room: + room_tuple_list.append(room_tuple) + if added_rooms == 0: + # A room that does not add a neighbour is a dead end + end_cells.append(room_tuple) + if ( + len(room_tuple_queue) == 0 + and number_of_current_rooms < number_of_rooms + and number_of_rooms > my_globals.START_ROOM_RESEED_MIN_ROOMS + and reseeds < my_globals.MAX_START_ROOM_RESEEDS + ): + # Like in "The Binding of Isaac", big floors grow again from the start + room_tuple_queue.append(start_room) + reseeds += 1 + + # Rooms that are still queued did not add neighbours either + remaining = [cell for cell in room_tuple_queue if cell != start_room] + room_tuple_list.extend(remaining) + end_cells.extend(remaining) while len(room_tuple_list) > 0: room_tuple = room_tuple_list.pop() floor.add_room(room_tuple[0], room_tuple[1]) - return start_room, number_of_current_rooms >= number_of_rooms + return start_room, number_of_current_rooms >= number_of_rooms, end_cells + + def _order_like( + self, dead_ends: List[int], end_cells: List[Tuple[int, int]] + ) -> List[int]: + """ + Sorts the indices of the dead ends by their number of steps from the start + room and then by the order their cells were found, like the end room list + of "The Binding of Isaac". Sorting by steps keeps the farthest dead end last + even when big floors grew again from the start. + @param dead_ends: indices of the dead ends + @param end_cells: cells of the dead ends in the order they were found + @return: sorted indices, the last one is the farthest from the start + """ + rooms = self._floor.get_rooms() + order = {cell: position for position, cell in enumerate(end_cells)} + steps = self._steps_from(my_globals.START_ROOM_POSITION) + + def key(index: int) -> Tuple[int, int]: + cell = (rooms[index][0], rooms[index][1]) + return steps.get(cell, 0), order.get(cell, -1) + + return sorted(dead_ends, key=key) + + def _steps_from(self, start: Tuple[int, int]) -> Dict[Tuple[int, int], int]: + """ + Counts the steps from the start to every room of the floor grid. + @param start: cell to start from + @return: number of steps for every reachable cell + """ + steps = {start: 0} + queue = deque([start]) + while queue: + cell = queue.popleft() + for direction in Direction.main_directions(): + neighbour = util_functions.add_direction_to_coordinates(direction, cell) + if ( + neighbour not in steps + and self._floor.is_within_border(neighbour) + and self._floor.contains_room(neighbour) + ): + steps[neighbour] = steps[cell] + 1 + queue.append(neighbour) + return steps @staticmethod def _is_next_to(room: Room, position: Tuple[int, int]) -> bool: @@ -225,24 +302,19 @@ def _add_rooms_next_to_room(self, room, directions) -> None: for direction in directions: floor.add_room_next_to(room, direction, RoomType.BOSS_ROOM) - def add_boss_room(self, dead_end_indices: list, start_room: tuple) -> None: + def add_boss_room(self, dead_end_indices: list) -> None: """ - Turns one of the dead ends farthest away from the start room into the boss room. - A dead end with free space next to it is preferred, otherwise the boss room - is moved away and connected to the floor with a teleport room. - @param dead_end_indices: indices for all dead ends - @param start_room: coordinates of the start room in a tuple + Turns the last found dead end into the boss room. Because the floor grows + breadth first, it is one of the rooms farthest away from the start room. + If it has no free space next to it, the dead end found before it is tried, + otherwise the boss room is moved away and connected with a teleport room. + @param dead_end_indices: indices of all dead ends in the order they were found """ if len(dead_end_indices) == 0: return floor = self._floor rooms = floor.get_rooms() - farthest_first = sorted( - dead_end_indices, - key=lambda index: -util_functions.calculate_distance( - start_room, rooms[index] - ), - ) + farthest_first = list(reversed(dead_end_indices)) candidates = farthest_first[: my_globals.BOSS_ROOM_CANDIDATES] boss_room_index = next( (index for index in candidates if self._free_boss_locations(rooms[index])), @@ -420,44 +492,54 @@ def place_super_secret_room(self) -> None: def place_secret_room(self) -> None: """ - Places a secret room on the floor. - If no valid position exists, no secret room is placed. + Places the secret room like "The Binding of Isaac": it randomly searches + for an empty cell next to at least three rooms and not next to an end room. + After some attempts the criteria are loosened, so a secret room is always + placed if there is any empty cell next to a room that is not the boss room. """ floor = self._floor - neighbour_rooms = 3 - while neighbour_rooms > 0: - for room in reversed(floor.get_rooms()): - # Check all neighbours of the room - if self._check_directions_for_secret_room(room, neighbour_rooms): + for min_neighbours, avoid_end_rooms in my_globals.SECRET_ROOM_SEARCH: + for _ in range(my_globals.SECRET_ROOM_ATTEMPTS): + cell = ( + self._random.randint(0, my_globals.FLOOR_WIDTH - 1), + self._random.randint(0, my_globals.FLOOR_HEIGHT - 1), + ) + if self._fits_secret_room(cell, min_neighbours, avoid_end_rooms): + floor.add_room(cell[0], cell[1], RoomType.SECRET_ROOM) return - neighbour_rooms -= 1 + candidates = [ + (x, y) + for y in range(my_globals.FLOOR_HEIGHT) + for x in range(my_globals.FLOOR_WIDTH) + if self._fits_secret_room((x, y), 1, False) + ] + if candidates: + cell = self._random.choice(candidates) + floor.add_room(cell[0], cell[1], RoomType.SECRET_ROOM) - def _check_directions_for_secret_room( - self, room: Room, neighbour_rooms: int + def _fits_secret_room( + self, cell: Tuple[int, int], min_neighbours: int, avoid_end_rooms: bool ) -> bool: """ - Checks if a secret room can be placed next to a given room. - @param room: room to check - @param neighbour_rooms: number of minimum neighbours - @return: True if a secret room was placed otherwise False + Checks if the secret room can be placed in the cell. + @param cell: cell to check + @param min_neighbours: number of rooms the cell has to be next to + @param avoid_end_rooms: True if the cell must not be next to an end room + @return: True if the secret room fits """ floor = self._floor - for direction in Direction.main_directions(): - neighbour = util_functions.add_direction_to_coordinates( - direction, (room[0], room[1]) - ) - if not floor.is_within_border(neighbour) or floor.contains_room(neighbour): - continue - if floor.has_special_room_as_neighbour(neighbour): - continue - current_neighbour = floor.count_neighbours(neighbour[0], neighbour[1]) - if ( - current_neighbour >= neighbour_rooms - and not floor.has_boss_room_as_neighbour(neighbour) - ): - floor.add_room(neighbour[0], neighbour[1], RoomType.SECRET_ROOM) - return True - return False + if floor.contains_room(cell) or floor.has_boss_room_as_neighbour(cell): + return False + if floor.count_neighbours(cell[0], cell[1]) < min_neighbours: + return False + if avoid_end_rooms: + for direction in Direction.main_directions(): + neighbour = floor.get_room( + util_functions.add_direction_to_coordinates(direction, cell) + ) + if neighbour is not None and neighbour.get_type() in _END_ROOM_TYPES: + return False + return True def save(self, path: str = "") -> str: """ diff --git a/src/utils/globals.py b/src/utils/globals.py index 8316b3b..0fca81e 100644 --- a/src/utils/globals.py +++ b/src/utils/globals.py @@ -42,6 +42,17 @@ def list(cls): FLOOR_WIDTH: int = 9 FLOOR_HEIGHT: int = 8 MAX_ROOMS: int = 20 +# Position of the start room, cell 35 in "The Binding of Isaac" +# where the column 0 of the grid is unused +START_ROOM_POSITION = (4, 3) +# Floors with more rooms than this grow again from the start room +# when they run out of rooms to expand, at most this many times +START_ROOM_RESEED_MIN_ROOMS: int = 16 +MAX_START_ROOM_RESEEDS: int = 10 +# Search steps for the secret room: minimum neighbours and if end rooms are avoided. +# Each step tries random cells, afterwards any cell next to a room is used. +SECRET_ROOM_SEARCH = ((3, True), (2, True)) +SECRET_ROOM_ATTEMPTS: int = 300 # A floor is generated again if it has less dead ends than the boss, item and shop room need REQUIRED_DEAD_ENDS: int = 3 # Upper limit for generating a floor again, the last attempt is always kept diff --git a/src/utils/util_functions.py b/src/utils/util_functions.py index 1d22b14..85cfbc5 100644 --- a/src/utils/util_functions.py +++ b/src/utils/util_functions.py @@ -44,9 +44,10 @@ def calculate_room_amount(stage_id: int, rng: random.Random) -> int: @param rng: random number generator to use :return: room amount """ - # Same formula as in "The Binding of Isaac", where the first floor is stage 1 - stage = stage_id + 1 - return min(my_globals.MAX_ROOMS, rng.randint(0, 1) + 5 + stage * 10 // 3) + # Formula of "The Binding of Isaac": random(2) + 5 + level * 2.6, + # where the first floor is level 1. Integers avoid rounding errors. + level = stage_id + 1 + return min(my_globals.MAX_ROOMS, rng.randint(0, 1) + 5 + level * 26 // 10) def place_room(rng: random.Random) -> bool: diff --git a/test/generator_test.py b/test/generator_test.py index 0ba1dd0..46a3247 100644 --- a/test/generator_test.py +++ b/test/generator_test.py @@ -384,6 +384,88 @@ def test_special_rooms_are_never_next_to_the_start(self): distance = abs(room[0] - start[0]) + abs(room[1] - start[1]) self.assertGreater(distance, 1) + def test_start_room_is_always_cell_35(self): + for seed in range(20): + with self.subTest(seed=seed): + generator = Generator(str(seed), "test", "", seed % 6) + generator.generate() + start = next( + room + for room in generator._floor.get_rooms() + if room.get_type() == RoomType.START_ROOM + ) + self.assertEqual((4, 3), (start[0], start[1])) + + def test_boss_room_is_one_of_the_farthest_dead_ends(self): + for stage_id in (0, 2, 5): + for seed in range(100): + with self.subTest(stage_id=stage_id, seed=seed): + generator = Generator(str(seed), "test", "", stage_id) + generator.generate() + floor = generator._floor + rooms = floor.get_rooms() + if any(isinstance(room, TeleportRoom) for room in rooms): + continue + steps = { + room.get_id(): ring + for ring, rooms_in_ring in enumerate(floor.rooms_by_distance()) + for room in rooms_in_ring + } + boss = min( + steps[room.get_id()] + for room in rooms + if room.get_type() == RoomType.BOSS_ROOM + ) + farther_dead_ends = [ + room + for room in rooms + if room.get_type() + in (RoomType.DEAD_END, RoomType.ITEM_ROOM, RoomType.SHOP_ROOM) + and steps[room.get_id()] > boss + ] + # The farthest or, without space for the boss, the second farthest + self.assertLessEqual(len(farther_dead_ends), 1) + + def test_boss_room_is_never_next_to_the_start(self): + for stage_id in (0, 1, 2): + for seed in range(100): + with self.subTest(stage_id=stage_id, seed=seed): + generator = Generator(str(seed), "test", "", stage_id) + generator.generate() + for room in generator._floor.get_rooms(): + if room.get_type() == RoomType.BOSS_ROOM: + distance = abs(room[0] - 4) + abs(room[1] - 3) + self.assertGreater(distance, 1) + + def test_every_floor_has_a_secret_room_not_next_to_the_boss(self): + for stage_id in (0, 2, 5): + for seed in range(100): + with self.subTest(stage_id=stage_id, seed=seed): + generator = Generator(str(seed), "test", "", stage_id) + generator.generate() + floor = generator._floor + secret = [ + room + for room in floor.get_rooms() + if room.get_type() == RoomType.SECRET_ROOM + ] + self.assertEqual(1, len(secret)) + position = (secret[0][0], secret[0][1]) + self.assertFalse(floor.has_boss_room_as_neighbour(position)) + + def test_secret_room_avoids_cells_next_to_end_rooms(self): + generator = self._generator + generator._create_floor() + floor = generator._floor + floor.add_room(1, 1) + floor.add_room(3, 1) + floor.add_room(2, 0, RoomType.DEAD_END) + floor.add_room(2, 2) + + # (2, 1) is next to three rooms, but one of them is a dead end + self.assertFalse(generator._fits_secret_room((2, 1), 3, True)) + self.assertTrue(generator._fits_secret_room((2, 1), 3, False)) + def test_save_writes_the_generated_floor_to_the_given_path(self): self._generator.generate() with tempfile.TemporaryDirectory() as tmp_dir: diff --git a/test/resources/floor_hashes.json b/test/resources/floor_hashes.json index 1d1aea6..c84876c 100644 --- a/test/resources/floor_hashes.json +++ b/test/resources/floor_hashes.json @@ -1,332 +1,332 @@ { - "0/0": "8d6dcf56d31d4b7c071a8ffd20aa2264f639354f43e02ea5cb5496f56d0cb98d", - "0/1": "5f4577c5d41322c4d90a49eef2690ec2e46645236f708ff4c3711ae93d41a3a8", - "0/2": "c1d97238a9d390af7c675ad2de63ffc182c1e3c541552cce4053246519c25554", - "0/3": "bf5e3d6d27f4b95c3fc63d3aff4c6fc95033a5597bed9971140a721f5897bcef", - "0/4": "9536a8d3f7d0cb034b094653a908f34069ecdad08e20e56ef5067156da0282c0", - "0/5": "050da3e679ce8cfa4d68152dcfe3e8e1f8f2c6801044e398785ce9edb884839c", - "0/6": "c1081af09433d81ba6133c065a096ac2e6dd803c39dd96a57e82d51ff7c94145", - "0/7": "1753b6e9fe8f780326a558b7b2dcb6b3210b08ab00cb58845b3ad0245224c032", - "0/8": "eb3f9b0a63ec1b52749c2cb784162e0fba8e8cef07990d8b1d83e82b87e36820", - "0/9": "4909d44c3380939b6178989a6c366e4c777a81bd84dd9ce9f7b58f0f1dd052c5", - "0/10": "6b58a252547f60fe434ef0557d6106cf26041a24fb157b86ea806de2f4f69cdc", - "0/11": "87b196a10a52589fb125cc2dc08b5850a6817e394ea655e1a8c4221d3e5557f2", - "0/12": "30a327e2f27cea1daffb9a89cd4d397b08c84ae33409d54edc0e891124a2b16d", - "0/13": "ba8b7a4484f8aaaee0a1d993a2b4e698f166a1412c3a16c30228f45e7604a83a", - "0/14": "52f9fc56b83b6c0926dca633a35f9b5e9d41419875147d0d9b451ea673d18e41", - "0/15": "367860ebcd6365afc4c7d877aa8df47f6c53416b6301fff2e2eb1109bffdfb1e", - "0/16": "57514292548f1bc564d42233023012a1c21c270f680bb1d0f471fb70c6df93f9", - "0/17": "a1abcdab66fabf65b205b25557dcfdb74e07487fff3ba82cf4a0d4d130d9de12", - "0/18": "83c67ee6f8073f7ea2258ea9102b94a8ad37f13823f32ffd9e93e5a16df4d927", - "0/19": "49aa6a052830a9917c981a79fe8a8d07ff41dd97406b8951af2ab8fd77e04c70", - "0/20": "2a41670371522616c162b485e7a3770f499e9739d6b0d8a1795bbce9bfeed966", - "0/21": "35595670fa813d9faa83fd6c05a438dbdfc0763bdf0b0cf66db7c51694f0f12f", - "0/22": "2fab124df3daa08930e7a054abf5ee4a77411e7181c7582e517fe8cd33d9b23b", - "0/23": "96c898cf344421e366c00da9c317ebc5c721238bac89a1fae701ff8d3fb7aa09", - "0/24": "428af508f0358b9738e331c30eef5da4bf536ad66daa2e255200e1e92b1a0a15", - "0/25": "f0af9a6b6c5875ccf4d8453948afba59f02e0b382b0d369075ee465b1343fb55", - "0/26": "bcb64d7aabe31512902c0102f955cd878c967c1c0e86d225c49ba6b49753b513", - "0/27": "c514a2e9626a13bd067c5999a8844ac9284401d5e64d508535b16b36981e28a2", - "0/28": "b740c2d92a0ce58903bba1392384b2863fc923f0954b3a4380f13197ad6dd6cb", - "0/29": "c5ecb162663070fffb088442462b3b95f49d4e1b29e006c42a83a3c884fa7355", - "0/30": "98201053d6a101de20abacc556a1bc724958f2557f6a34865274a984b4eaf14e", - "0/31": "10fac9716857614d0bd243012807709a5e6653606a5cd0583768ceffd34b991c", - "0/32": "e5b1d989cf7af14e4cbd439d5b53220658e6e500ceafee0275b3ea2518b603b7", - "0/33": "37cfb2e1e8216631e01f73d7b292eb199fc882761cdb48d3d57ac4356766fbed", - "0/34": "6378e4a0d5883c4cbd9f4ca507982ba11c85b02471ce9d843f4512e212917a27", - "0/35": "ea0480d34d627d08558db799d4721d66a5e1c42e6d69f1204c961fe9df8c0005", - "0/36": "6c8c475946d8366d53d2b597f78a24b0fd8e7907ae0f659fdfa1387bd855140d", - "0/37": "4b3de14c8eeda3c1a764439867bb9209ea5ad9c8731c259c18557363172058cb", - "0/38": "d78f4157dbe02f17f9760ac1889f9316072ae0b5cb1f1c05a454ed29df011bb6", - "0/39": "6802f8c6dd3827cc2a6340b135b6e91ee6614677c314f124c26d47fbe2ddfcd0", - "0/40": "afd379c39577ebef32c5aa8111b7676232fdc719abf9201884f9a85fe0045791", - "0/41": "7972b4628848ae244d8081398ed66411466070a12bdd3662fbcd89872b08d418", - "0/42": "e22c90485a479738b39259bff6460ba7acaf5d2c8282db2498a7f73edf361246", - "0/43": "f9656c8f6fd65ac9a411fdd2a30b75494bb7bc7a314f1cca668537b898ba0e60", - "0/44": "10924bf62c680b4cf6b7a15e95831424b0169014858b01f8422e3d63cbab842f", - "0/45": "98f3f734bc8aa1b621a3f24ab45e436e0fd27e3b1f5ced7711585d3d9463b5ba", - "0/46": "74c925993ee251e6aaf6b1b651602a1aa2543406ed16a895919b0e513e10b9df", - "0/47": "7ce221b008a4eadb56ed5f1061206e742b1d6ab5fae0bd7ad11712e4cc4378b9", - "0/48": "3764309c2e659314c96a443b0d40e6964d2e926f7811af7b027e87be9e61691c", - "0/49": "9390cb9e09fedf57b434150677ade1be3dd46b1e0928f3625f319490c9712423", - "0/abc": "7efe2f4081d472f38f8050f82a8b21bef0577ea7aed1d9a03ea980a9e8568018", - "0/test-seed": "a96a6412ff8255b23898bc76902c2d876b6af07e4f7e926058838bd09e21509a", - "0/a\"b": "f02b1bd2af20fd7e267a7c97eaca5965c67436277100cbc75b1797025b95c051", - "0/รค๐Ÿ™‚": "2a06ee78cfd0202bc42ef4de0d5607873706854bc730f8bd864c53a11d42ec4f", - "0/78d11f0d5a8bd74e510194e16e4b352a": "bc071dc116646dbddbaac55ffe255c810a5e7aebe6a00ee245aff068ab275231", - "1/0": "2bd94d10e22f953ed69569a6f9fb3090258aca843386c89da058b412fbd3e692", - "1/1": "5917267d2b4b6d4f3ddd267d08d981db41071b03bc047d7c0c4671286df4b058", - "1/2": "38b0470071edaaa4fca7d0a7f301dbf412b751c01b2c40d7c93fba83ec1ef3c6", - "1/3": "24e937030947bcedca74d085799cdb19ed8a634765e71779bbef7299e71be522", - "1/4": "10a91bc3089288234633f9592aa052dd8c682f691b4d91fc826bd95d29300901", - "1/5": "a6560047ac50d74c86854b7b87fc41dd45890d18e389ab165ce669bbc2e8bd88", - "1/6": "fe5b0969b2c8cfc45fec12da9a560200938e16d2046d749ecf3b657d27eb7d62", - "1/7": "540d181a942641f1d932dc15eb470ab1f33f841512f3c9a2153926979ccc3349", - "1/8": "1501516541cab7c0b22a922badccb650300f5616057f6d69ee8c6c45e4fe0ba9", - "1/9": "8c9624fa9771555697f17ba57f624d0394c9cb025c94369b3395f47cd06a188b", - "1/10": "07db98981aafed25485ee4fc8a9849f7766c5aa864142506d36027ecde826c77", - "1/11": "4d766e5c77aad7070b886124f309c776c6bc3e6519922b9801fbbb5648a5b96a", - "1/12": "f9e6a7f9015188657e658d38c7aafb65f27d76a532511534d43a07fb32e2b497", - "1/13": "34c182555099c2ab3cf0d628c68329c60194f17cedf3bccc3833dd6f37396877", - "1/14": "1996be5ed35f0ecf6fed93dc3fc6c19908b385342ba82c313c5ca01364e73393", - "1/15": "7bc91ed6f55f534b12ec6c7bb2882c33da42a1b1f0a899154a474e1aac5d73f0", - "1/16": "c9b2705f4ba82a0538ab6b680012742917dc01bc6d968274666ccea00969faf4", - "1/17": "7bc79b443e73c2bccecf7f4f761ac267e8b84764b949e9449fb8ec3c6e1172cd", - "1/18": "d00444b3e540bdc58f79804cbb7f808fb60c6db7a71e110d77413afeb3e6a049", - "1/19": "a558677a1d7010da09a5654f2990ad096f92c7511e3a612fe76504565ffdd7be", - "1/20": "18c52aadd8dc4170f3547b63612d491fd802495b59792e660a0b85181e7ea67a", - "1/21": "738ef3a4ea8077dcfb58a9772375b12798a5022cd6233ffe53e392cd67eea96f", - "1/22": "89c08ee545a5273203584814a1145e88dd4740917cf20d63a77a1af531d92065", - "1/23": "4d74214749e79a646b92513f24ea4129b774e3dce51a51517224816027981944", - "1/24": "4d38ffcadae124e0486d7f470177c057951bc3e1ad2de04d60c1365cfa12ed8b", - "1/25": "06341809391b847f6f7ab2b263f33af80770d65af10ac05afc13226404f7d8c4", - "1/26": "aef820545f80b54a19e73c821334a875067106aa279513c326d2a3baa14db37b", - "1/27": "6122fbd49365a9c4d6f3f662750e0e31340e5e3cb350499605d37031456ce31c", - "1/28": "4da431fe7c78b52920ea063e0ec840d07362dbf8a012e1b81c97b99c482446dd", - "1/29": "b5bb49c99546e7e3371cb516b220894caf3a1246cde788507c36d480f15dafa3", - "1/30": "3e0b2cf2ef1a540a5750c5cfdf5c9c322262282e3aaa4f0fb48bd86dd6d78a92", - "1/31": "3291ed743ed8a043ed804a86c21a0721b7673e80cd1321413399b3149ad8a5ee", - "1/32": "849780e691ce32f6bbc19149388c8eafef3edd6ce9965b9f62feb85ad8ebfe62", - "1/33": "0d130d8471ca5f5cd41a403d2e347903f78dc9986fb12848ef993b60f5b77bff", - "1/34": "941ff434fafa227f54639a11a6b01942c30a9744a73486c86308cb77b40258c8", - "1/35": "254466e02f59dd21916dea7b675e9876739ca61e12957b12d571effbd723ae0f", - "1/36": "f336920672726dbf4242dc1b801f41082105bbce84936f1f1a2313c97ac5dc42", - "1/37": "2ea30174f020e8a6aa629fa8dacdc93378a003ad048285ddc035aa442173c261", - "1/38": "3633b4262764093b528fb251c499d953ca837cc6eb05e4d829cea0e9ae055f0a", - "1/39": "df56d1387baedf704b5267da63aa5f029e0757524b731ea2f605da9047275ad6", - "1/40": "a8dc078fd5c986e0aee28450a6e212a2791a6af0fa4e46eb59901a74567ebd6d", - "1/41": "6bce5b0b84d405fc90f31cee870d379ea8b86c013b7911c46ae705ffddf13e52", - "1/42": "f9e44cc863e4fa0463a3e686ca62a5a61736e4f3cfba20d4f7dcbae3a7c57ffc", - "1/43": "58f5fa0590c24e88c941f7d051cff54c8ab62e65a65adedb45f8f3df9a0e5cda", - "1/44": "aedc103681f576e8c4927bb409cb40ce6482d15ce37b4f6ca1a35182bb44e5ea", - "1/45": "37c7859d4fbbc1f267fbf04ac76c19a349a274291afe78dbc1c81da378143354", - "1/46": "e9781ed04b634c722047e00556f27e17b0a80d09bdbf614d4f2f47d352d4e71a", - "1/47": "73c3a06174fe742f0006b2d306461f19de837d467000002c5032af588198dbeb", - "1/48": "097fa4585f23b55d2ebb2f076310acd14cb6c48809435df443d8b87e7d923950", - "1/49": "19143c33da9dd3db8ef300f032bfe1368d71b4e66275c2b271c702f663480958", - "1/abc": "f9c2323752056607ab1ad13bf030d5e10701a2fde64d8b26c6e52afbe1ec7173", - "1/test-seed": "b9e397624a93d054271db6727a367dcdc2f3042df32969a32bec8ce4a445c4ae", - "1/a\"b": "6bbafe12cb49d87933fe88b0463cb770c1e3a1cae551e8be000d896098bb4c6b", - "1/รค๐Ÿ™‚": "7f5725be7d8b5a784ba758601d874655f202ee7f8832997d85b9f3ddc8796a66", - "1/78d11f0d5a8bd74e510194e16e4b352a": "530b9bea03dfc1b16b498325b0327291bcb4665844cfbc525030fba7d87295ce", - "2/0": "6acc0864f92f26588fa178c67f4b53bc92b3c09a7186010fd3fdd341de39a4d9", - "2/1": "e6dcba639d8cf15f670e16e6b99991b3c96a4b74d0a77a2fa69e244ee7d34bee", - "2/2": "aef7f36cbf3e0dac0a84e12dff914e6d1e9f96346e9cc270a2e0918c44d26282", - "2/3": "6d4ec8fbe5fa0cbb3a8ac43cbf2790cd4b74fd35151bcf810f526de20031c7fb", - "2/4": "de69675ccc43302289d1047dd7a92ecbf512ac3b6db4f98a5daa036bb8e6b58f", - "2/5": "573697521d453b69a9afdc6498bed3c3076610803eda82de235f5cdc3cf8de12", - "2/6": "8e6d796c279ef963cff9ea8a08f77554c5bc56d2c437169db72aeaf0f103aa4c", - "2/7": "c999adb08cc4cb1851dd629d361660278cacd04d702637d8687ce2c288aaeed7", - "2/8": "90410f3eb3c17b63affa590dd1c65879cc1b89d3411cb847bf0323673dbe7ed8", - "2/9": "0963b3bf93489a2b3a2c97f26c927bb4ae8dd881c310a12721fac89be8dba786", - "2/10": "c4302926e591c060d83a1c84ec6cb273ba03186301a9efd7afbbb8bed9bbbfe0", - "2/11": "7aa7bb9faff3c9d1d006328a77ce0d62f3138058742ef776c6148a6560ee35b2", - "2/12": "4f343b62f1262216474bc5d9b35fa5449560720e66defbab4a5852ce483900a1", - "2/13": "af02d4cdb3992368fddd4513e09e6bce587a23b9f46848c73825209d73832a45", - "2/14": "2c0e45afd09582cfc078fbcebdfcf9491bb8769fff047ee5044e60c214d6310c", - "2/15": "f52a0001dab51c1dc94089ee78acdcb04ed91e1da3d4f1cf80af48f788561e71", - "2/16": "2a28e913e7da0a37a6bdeb76b1084fb58ebc35760bc1b1049ff8481989ac59a8", - "2/17": "20d866735cfe0a2373975c1dfdaeb0e1df48b2dfd5199ae6c15d806f5e93a66f", - "2/18": "0f6804e1bbb2074895b2fe691ddd9ef7707fdde9d145897ad54b4330ac176699", - "2/19": "e02b90860335473ac16833b2b4d885be2709b815caf80430a5aae4d9533aea67", - "2/20": "18e6b013c0e8c698a5cc2d637f69a697fae80867ed6937d82ac7b629b87f6df6", - "2/21": "2b6614a1ed60642653feeb75f326eb133ee13167cef34d84d4a55b346c4c5992", - "2/22": "0e25c81611274b6ae160075bcef9ea4fbc7143d798a61e846be5bbdcf86e3813", - "2/23": "a071ea8e7974258ca66ba5104955fefd84ca46e436a00d7bc71747cc494c1bc3", - "2/24": "3b01333b93d29a4bc6baf7944fb4378c3a19e511716a13acc9a3d363588fa3ee", - "2/25": "163b0f9bb48dfb97f0586c588bb65663d4d0ac5e603c3e0891a5fd24cd16c6fe", - "2/26": "19a4a5f60c9f68ccb2a4da161257b9d0c9c17c4f664ca1023b11e5ad01ac0de1", - "2/27": "213ebd4dfe312bd1fbfc08c8140aa0723e6ef5b22a830c560543818f66d9a774", - "2/28": "55b94ccf4b15301236a8959b42ff7f8b0ac94b9444225a152807c88039696b87", - "2/29": "9dc26f87a496dcc921101c0bc02ab11894ecf052250ee9715a3bc9b7d0cad630", - "2/30": "df9a2b41b6576fb3f1d27140fc27bcf81d226ab3aa42df0f5c404c9cdb49300b", - "2/31": "ec487f10292686ce770d9c45b678017e0d5596f250d203922b3eb84f391785f3", - "2/32": "283707767d3c69d92caf98a43a5d9bb96a4c8057b48f440d8eb2900c8754588d", - "2/33": "4f0cef0e4737a2ec8714adc43eac59b79f052cfdba0dc30ae931a210455cb800", - "2/34": "549833527f330a8903e6487475db95d2cd3111186de44003941d6425be057cc6", - "2/35": "d272468c488c9c981387cf9906e73fe58ef52575a17562616fe1773a9e6786fa", - "2/36": "1b6c13fbf3ada4ac5b9f1ea9e59d31912cd70f69ff3f8fd2111cbc6b97e55e96", - "2/37": "b492c3e3b517d8ae018112011176d5aaf78408769d155cb4ee639b7b30522440", - "2/38": "910653cf3f1ce883e8cd7925a9fa072cd4475136c97d7ea4933c994ee0f92623", - "2/39": "eb04d486d91bfb25285d43448c18d231ea0f60832311b4ae4c50fbdfaf0683af", - "2/40": "204ce4c3ec144659d94d87c310f938f029f8f2f119dad681cfb3463f7e1086a8", - "2/41": "310cb4d0879f8a9241d115081d90bf3e850c26e654daee2584a97dd2e61dbdbf", - "2/42": "03efbb36ba1f05f372d5c3e5764a773dbef81f55746358fd9cecb4a61159442e", - "2/43": "c738eda7b165566a2af3f279e3ac8b4dae4837e4ac971de79decc1fc3db392f7", - "2/44": "c9a5c278176615cb107cb9e12a1c1e842ccfc563385fff7bdf14bfe3cbb1707c", - "2/45": "2aedc1a8f2ba00eec7a649a03ac96719777626b9ac5797d613c56d624c3e0eb4", - "2/46": "e6fe75021e66ec523c09cddb3cd5f2cc3e7717d7537c39f788d0605317729c55", - "2/47": "b839fa492a60973f9aba387f5ef25fddd13f4a7ef8b75d562ba7b5ef9f3da347", - "2/48": "89929d7a0e3b8be5c1006f15651a9bbe84947262741701caf1fcf99a9ceb8a0f", - "2/49": "1655812794f580aad0d34c46dbd991b4cefd53f59fffdcadf955b2911a34d3a5", - "2/abc": "e6564198a2c4fb9dfd484464f740836bc0212e6774648e3635665e4b10d9edaf", - "2/test-seed": "008f6fa56cb242d36a351f9d39ef66bdd2b6d016f8712029f411020a7b0bfe37", - "2/a\"b": "69e73effe22b8b559d68c4b79d5393d84896b8e767f611fa677f7ffe8f323e8f", - "2/รค๐Ÿ™‚": "53d0dd53eae2b09040676e8f3d7a09eedfc74a8ed5ce15539eafeea570b2ea3a", - "2/78d11f0d5a8bd74e510194e16e4b352a": "7a83711dab82a124cf864f79c76da5bad8ff951477b50381a956fda0b5cca481", - "3/0": "23acf02b186b30ffaff939dc8c163e5f272fdd54eb62b66800f0233a1598b369", - "3/1": "0b21c53c66efe30515c71275c39f441662e3ae6fd75c0a370a83da0b4be576cf", - "3/2": "649a98ba2bcee70d97265515283b01b1766ca78086cc1e05c1cab9df88074f33", - "3/3": "f9db6f721e84a97a5ce829d28b78d982e6780d709289eb91f7509ad15cbd1908", - "3/4": "5d8b6c0dd8ce6d2614e2472a7043a899f17d3919046cf381155b5eb34213da88", - "3/5": "cf5b123387b58d599707e7d9ae2c526a6331248a2f929216be10ca81da6208ed", - "3/6": "316411ae38612cd9c87b7f219011bede65f496b89bc1fb5c8c1944daff2014df", - "3/7": "67cd1269832096c27f9774476b1cb08960e2e25a3e0aa27b92291ff2b4641a32", - "3/8": "d089ab7cd0e1e0cc70ec36f4c30b9316f9d02f028cc6ace0391265845e009814", - "3/9": "39f0d1cd637ee06997fa0d2acd4efccac1d0f03ef256b27812d52388d82b24f9", - "3/10": "ed1e6ac16e1033d8e7815a6ae263cd5a0220f2e5d5d63caebd530f00def733a5", - "3/11": "2ef629ed7d545b0c6d48920c520e4857c77b803eff5caf43af0788ff490b856e", - "3/12": "bd890ed85a7d52e1713f5c3f5ae4f6835a2ac6679008c9e8b00095337e21503d", - "3/13": "680e8cbebaaf117305dd5924f8bb396d3e68d5a3f88c3c1d3c233cb2212a3893", - "3/14": "a5b31c0ade675993da5d1b67d9f497fb4142faf4c70faf374fc0fb398992ece3", - "3/15": "9e4320dd820c9bd723f7a23c05e934ca319c39958bacc675b1aba5de0844770d", - "3/16": "a8f0c344ae1da7a0b95966e5f1839dc31f0df118bd10b0f4462208de4194f189", - "3/17": "cc1eeae08232ca8ba8129b2425b7d9872cd7f8145d835c8aabd1dfca405b4263", - "3/18": "23a3df6de6df9bd4b234bf47f5981d5f938e78e7c9ffa83aadd0a1b241bb2e14", - "3/19": "22c5ba8c0ba90988be0c886b8a9827c11dfb4c5c65df0ed51ba6b6f9860918b9", - "3/20": "ef3a8e30c1d0704860dfc5ed0758bb59664913f55b14099f582231c25cb199f3", - "3/21": "7c4f606c0df09f7d63068d94abb04e61ba36a3a87e3e200c3c347e08757c7308", - "3/22": "36b4a1fcdd0e78a7c61b63279129bb49eedb9bebcd539465df114a2c931b1fe3", - "3/23": "243f56f2110881f6e809bed5edcdaf2abf498b2697cbf4d45eaffbdc482691e6", - "3/24": "913d56a20e3aaff3d780e0142d6b8202414226f4ad6f9f9aff631ade0a8989f1", - "3/25": "06a6430932f61fca1f23b27c73fde96a2d5d8f58f61b2853737b2f57ace4db6f", - "3/26": "c2f7b7af309e60cad4af9bf556cef6aa2872ab736da9beb86dfcda30c1f1fea3", - "3/27": "3989f37737fab6ae370829dba9660aa6c2854761553449a2cae0055b4828f03d", - "3/28": "8a39365c9e858f9d4a293cbe81ce5fa4c7c5ddfaa96572cfbd1780255e1911da", - "3/29": "a89ed98d0b88bcf060e5ebcc6bd15c74a56e2c37c2c18316f722a812607beb87", - "3/30": "e65739804bf2345492f382dc351fdcfc5f3b89c00f0bb73a26aee617e20c9d90", - "3/31": "f6b5330efcd97e8e7b78f7fc804d3971f27929f2a5317ef4d866ac8b9123d022", - "3/32": "d91b0200dacbf1b9ebae7c5957aa5b3e8a79cf2438b469a4ba6a5f0356442744", - "3/33": "f535b73fb221f4646b31ffee10f0997aac21543658753dc17bae6bec0369df6e", - "3/34": "a2dd02459033e2673cbc3834c426a3279baa128595acb2333abc861e46e01d3d", - "3/35": "e42be2942018fc9837e6145831268aa4ccd048aef2fae63715f5e914a54644db", - "3/36": "d528929a2742833b595d53fefe5916a5f3fb29a6e514b963286b692c1407f59a", - "3/37": "dea2fcd5452feb4ecfddecc47eb3a9381b019091c2d0a30fd2b418006c743a86", - "3/38": "d23945ece2d4a432e030d1189f57444e6775ba1cd73b5a90cd96fc1e131a91a2", - "3/39": "4a06e5c609b2c2ffa824b882dbbeb7c84c9d357cafdb58265f095e58a6ba3595", - "3/40": "1c444d7c378c0a816c4f0a95a9a2292641b3ca31ec64183074d0f0f53524b414", - "3/41": "73a417cd552470c32240d71be076c99cf5eb1fbc692de2480b7fcb24448996fa", - "3/42": "500cdee2c932b8fcbf4e30f1d1fae91b75e0a23f1010699d562225f9c71f246a", - "3/43": "2b5855095b96db82e9fd764ab87eda662ad0301ff6f783a09743580578f505c3", - "3/44": "2557fd1d391b84087a94923fe6d37089469fb9b9519e5e389741550b846f15e7", - "3/45": "ee3b6a376ba11150ee312a2f5cb380cf74936746a7a09e7baecae373a37fb760", - "3/46": "3c66647eb6decdeaa242c929cb0827afc98518a54a0cca7413efaef45da299e7", - "3/47": "48e1cb729c1bd5375602f33738305221f809224309d278aedd15a270439b3c2f", - "3/48": "82d9fde3df40c5f75ef4a9334877d192bb229a2be982b9a421032652835c5ba2", - "3/49": "305b989d7638a3510d61e224e0a415d4a0bf594fca7a78670d00b046f1387aed", - "3/abc": "80d2216dd25ea68c0d7e547cc699d0f27f97bf78532409fe4bb221eb62edd878", - "3/test-seed": "8edb9de8338a16b1b3ad814d12db32ef84aba0277b90693057e1b9194f735989", - "3/a\"b": "60f4435fd5726e8be4c80ce558d3c9a4967a15fbbe901ed22c43cc41db00acd5", - "3/รค๐Ÿ™‚": "ba2d2e46c478c0b6a9d17ea7541084f0ed46ad4e827973de0b4789f682b3317a", - "3/78d11f0d5a8bd74e510194e16e4b352a": "1aaae64f2f5e3dc69df992fa069ec45e234763f1059b551898a557d7ed5bb09b", - "4/0": "27af039c9eac404aebcc42061542d7859388fd89047f41dbc350c08c19ff0203", - "4/1": "66290c64a91d7616a0543ada0ec15d5ba994842f4684f00593fb8ffe6a7e59ac", - "4/2": "c978e673f2eab6625fc4226237b476e1caae5e3f146157148fb217d64b3895ae", - "4/3": "8ff72cbe55313e67333e06408fc4aedcecaa1df9e3ea2915b7ecb4ac488e6376", - "4/4": "187ec80d1aa659df08123590461d551b68e94c7c4581a675d15d69bf28964ab6", - "4/5": "a4426195984bec873e74788d3b5fb8cd73c99112d757644a54d24fb354d9e88b", - "4/6": "8e3be63ce24e806461263db93e09aae098120bcdbc4936387deb8b24058167aa", - "4/7": "c19403b211eabc01f8dbba8a684d6a0b324e36534f38005a5a9e2fda190307f4", - "4/8": "adec1a35c5fdc3a6aa269f92b6b21605b6455a4a90ce55d2a9a758531c8ccbf0", - "4/9": "b720d1ecdcafe4dc212d3db1968fa939d6c67dc4fa45c98665c4aabd8f0541e7", - "4/10": "6f0d58541242e1038e0dbf9e169b28537eaff62d5cc4a7d023b9adbeb594bca6", - "4/11": "2549d89700c70de4b70f7e883580ed77524fc69d2939f109b6a9116cbbed42d6", - "4/12": "42fad9629723609de9d7f5b6482bafb94aa6fc4850d167f9a69c74d0584f8588", - "4/13": "3e2d34eefca0950ea5a3195ad0d5f4a73967ee1d1144515cacc32a67ec0dbc64", - "4/14": "6c9648e071e74f44bfeffc436a80ad073735c18255a921fbe1652716954e6f02", - "4/15": "e5e4fb72caaa3ae77c223b6a25ae3a79f68486bdb317a1ca52d27cb14ba9d922", - "4/16": "1ade7a1d281c39d895ccbe428d0ac70dc83081e250ef294250d20e844933b2c7", - "4/17": "570f9c34449599145d39585e5cf92f8383ca91502075ac45b6f0199fb0bd866d", - "4/18": "ce52b0e2d736d93774b764093a12c160ce9062e3c0b09b6dfa053c7eee485987", - "4/19": "4bce1f600fac921e80e5e43273e3ba61d87dd798d3d5180ee822553b4eb11dca", - "4/20": "20bc43ee088ede2947b85ed33f2b10c1a67dc6603adae441738ab9856ce02d47", - "4/21": "1a30f65b9b102040afd3631019360984f82617f54dc4ee507661adbded106470", - "4/22": "18b3aa912e9b3cf9dc4716b8e44076cbe2a5c585e0e40f2644d471b86a66b64b", - "4/23": "d344f40233869080dd414e52f8846b317830def68dea9fd4d0375571c1606832", - "4/24": "0a9861ef39bef915b057b114cf09cb2561f54b53307b6f54b1b5deaed82a7203", - "4/25": "7f8d3f4a3c55a4dca7848f3550850a79c11645d6866e8e175434805aaad0eafb", - "4/26": "2ee48f7d035086546acb57fd0165f3d4d7a997c1719e33f17540bc50ddb67c0d", - "4/27": "acd5bfa7d50534cc91636265e12bd41cab12b5729f231ee92635212046e525db", - "4/28": "6002734ab93bd25d44ac05aa002b57cecd8ea751b54cc83d974652bcf37cb625", - "4/29": "15303f34db9bb03b3482e0ca4d2ffc901f61640d5ee21f200bf411b6cbb0915e", - "4/30": "cddc5d500895904b3e2cd99002da56353a56671582b52d5bce5ab3beee449f47", - "4/31": "74459bc94997944252a03bee615fdccf9f23894e288f8746467c52e27c8661ff", - "4/32": "9ddd6879d160fb0b1a07d7d4104afedd408adc0dc2fe8b0e9079d3c822f68709", - "4/33": "3cafe4bf08a3dbd751582f6f1629db1f78ce675a1bb81024180e7bb2068dd9dd", - "4/34": "6b942cbe1aa7d69f9c4f1b3bbeecb897ef4407c0f7830f6eb2ac431a460d5638", - "4/35": "44ade7f94a8f535c9d32adeda6a980c833a77cddf2697a64e162de47af5c588e", - "4/36": "3d13ff2cf7c16e8e839fed9f7af0339ada77171936bbc557d2c503d775d74d46", - "4/37": "4fb1694a90f1a60544fa17f4160840ffd733813f535cd1fa770b74caaee5dd61", - "4/38": "77a768c16377a526cae1599ed3e471f63516e315cd27f18f1f1bb78f0cad2e55", - "4/39": "48adb5d6801c407d27c2a6d7ef6ffc4b65aacae19795c1f7e4e64e9ea4dd1c29", - "4/40": "fe097b566551a6579e06b4dbf3489dcdf11857051c94588deb1c1127a7805de5", - "4/41": "f221d557f6d30346742ebad259a62da2cfe5b8bbbfacf04e830c671b6d665fa0", - "4/42": "197e58266b8a2412b4b4a6720228f8f9e04d24a520f12e00f03e94c806403709", - "4/43": "60a6c5b7f74b68036731b9faa28c914b810585907f38f1886a6024835af59007", - "4/44": "16f0b46fdf44983635bef521c40ea12e0a6b2b29c4327318c14152c109ae784e", - "4/45": "a5386299b27cfaeef5e3369b916b6e3c5a06657cd7ac9cdd87cb419428ed1ae0", - "4/46": "42586062efc0c00f5b7ecde72e38e2a7f62cd9cfe1a585ad4ab4f0402b60410b", - "4/47": "154e9991530baebd25e374e95d846eeabff4d407e5d79c0667213a982864c4d4", - "4/48": "9ce81c38d3dee75a8788d9a109ebddb869f2e02101667c9d47e757369d50b70b", - "4/49": "4eb66f7861882571f6e1a39eeebce151aacb2b71873268a36101feaae9c5be60", - "4/abc": "9b2c855c9baa7ad9d68553644b9942e98e0027768b5c8401a0f2d1b0771346b0", - "4/test-seed": "99dfe24dd6b4b89dd15e42e31fa0f44117a3782375146ce803b2946e6f6b3bdb", - "4/a\"b": "b20db85161e877d8238ab27c6b4acf9383a7d5ff440dc42154d76f842bacc515", - "4/รค๐Ÿ™‚": "1f16923313d8e105223efc8919939ebd48afe08bcf615f4be2e6240b4c08db48", - "4/78d11f0d5a8bd74e510194e16e4b352a": "4ab7adece660eec230f6220e9457c905c595390fbe57162a0a74d8dd4bfaac17", - "5/0": "06792bba12f0bca8e234bc18b05a9c444174a6d6a447cba371228a4449503cb6", - "5/1": "5156712d002a83ae4bdd4b373cb8d9d3d10f4bd4e1d089130830b1d63ee22985", - "5/2": "c55019a7054b622838bc02736e459d862ddd98f4ab7d615339f42ba47e3bc02a", - "5/3": "552cdb154ede4562bc8c89e40de096e8ecbb01f2333248c60418c904e8a2bc65", - "5/4": "dcb7cee3b6fd8397d5d0db5c5eb44d48995c38d2daddc433ba8d341dcf95cea5", - "5/5": "9814214c5621cdd6cae948564c3f148373c5f12046b9cb6923a57b4bdfb9d9a6", - "5/6": "9b2e1911fbbb484bcf7646449d21d0305c6685a266a46a9c80f8776362dd7b2e", - "5/7": "e4b0096fb809a3cdadb3336d15ec7782f67bed930df068f8d24580840aa1c639", - "5/8": "b7dfed177f116e91952143ca7ab6c1bd18c4e3f0b51dd9b66fde2964e6280069", - "5/9": "7bde8d09a7ea340d02f8645e2b29c2163ee865d1e30afed5b60222aa4c681582", - "5/10": "37b03ef34a9912461386ba3220fa9f29ee5e11d5b6247025591ad241de7850a2", - "5/11": "a08d2031f2e1012c9c3488003a446cb2176f439c1baccb9cb7918ae64e77a5be", - "5/12": "075d30798f4d82ad59cd7e88a9bad15bbe4c979108ec53589df299a0ef41ef03", - "5/13": "475b691619397d4a61fbc1524a1848bfb3e424fa6db6512e3016e54f5fafee09", - "5/14": "e031930f994a86379025fbfb2e4b02b23fa74daf5f5dfc7adf42537c724bd063", - "5/15": "b96edf0f4867e9cec5a705120e023c37a6b477524376d286c4444acfb7b6a323", - "5/16": "037dbaec386e372bd511638aea4d08667801cbfe5db87a11f275b0b6c59aaf52", - "5/17": "88c179e55348039740c8e838770619dcd07566fd48e1f0eed383c03db7966145", - "5/18": "e5f6e06c3162c6cbe89ab1b58e9efae6cb8f304c2c14e37a2002fb6e7f03507a", - "5/19": "36e3b50338941d1f5df01f7249c0965b8e38f3486c5949fd5f743ec9c35fc5be", - "5/20": "b0578bc147a0e02a91826a7aa0054e1317299f894da78212d96973fc55a2c5c9", - "5/21": "fae1fd5e19b662456fd2dd307e4dc9b8f67cb914c224c2f0606aae7ede9c2c9d", - "5/22": "eba44f17bd6b01f26f4e4ccd69e57301df6e275c942cbb166ed5cc19d3a21a14", - "5/23": "1e855e5de436eeb0fe65fd5b3b7bc9cb2a38271abf6c606a5b0cd11638e43970", - "5/24": "dac462728b13ba1501c257a865f218b235f74367bad36923285ba44a9f752ba8", - "5/25": "c27657b5efb3a28ba03279d09d023e7ff409c57283bde0ee6caa581d1e46c986", - "5/26": "13313e40e96ae6c90d095cba8686b9ed8511da88b46f8edfe4142fd2f8d36c96", - "5/27": "1d1eaafbe5f04abc8176790dc4ac6d587343842a1cc15e8c2ee5212cb460d921", - "5/28": "c1331f0eab18b2870fb3faea8a9c2869a4cc8752f2bd87025508b23988dfdde5", - "5/29": "b4296bf3dd397d6473160a049a02b84e1615375e118cc0109c920a6e8ab369d8", - "5/30": "546474049e953d2c4f6ca4dc689611da3557a9e79caeb9b711e50af3d325b7f0", - "5/31": "26c80ec1c108fe5935a8e4564c57224409623880adcf03b63af5b33fc9e14088", - "5/32": "ce1ec825e7c3fb4b8332c5bd9dff02474356f3093a5ef9812571e6ccc1a1f6a8", - "5/33": "d182d2a8f4c56bb797cb24aaf20fe0710707d84917748d7ebdd2130a2a55b54c", - "5/34": "2c6cb41f5fb8a412fe5a1f2b2a5a9bc0d84a51b90aae456188b91f70476f8a47", - "5/35": "18f3c4e099def81ba2c22f3b6a1408c320a403db2e07f2e8567f2caa7f0da42c", - "5/36": "57ebce19720a00a45d69d7f2cfb786b85d386aa2106779ce9be22833fe894629", - "5/37": "dfbfafce42c857e8f1471d07dd4d28b3747b0c0cd33de3cd8c30ac7bfe71ec6e", - "5/38": "41c50e52d833c3fbaa687b02ac1bbb412adc2f7b3dc46cb4b5ab37e346ff97ee", - "5/39": "32c48510f09df34cdbe5e82816a9c9c5190be3880e5e16b208f71acc3f400a6e", - "5/40": "91128b4273cbec5d1289c161166be9e5afabb8c144909b471847cde03905b436", - "5/41": "3a2048470f863e40ad9a7155d2382f0933731ad97fbb0a8a0edb3577de63ef12", - "5/42": "7cdca53ee8ae4fb72130b5511bc117e30e7b4097e1bb8c99e16d74d1f586bd79", - "5/43": "fe7b12d596e1d3f850ed4669f92aad4297336d5b7a4594b56f6412bd230d26ab", - "5/44": "af5bde20b4463a244ed4d0f4945ded98aeb8ae7d34751c1c6294ba73810bb40c", - "5/45": "b16bbacb5f57fb9d1de5b504c43423507c79bc042cf3e927b6977df0e82e46ab", - "5/46": "07c0ebf3e970265eb0a902d7258b71e97f93c189ba912ec25f999b9e881b0467", - "5/47": "6f8854b49ab7ae5d5e911e2c8be758a76b2137352adcbc5ab3742370525f3183", - "5/48": "9faf85dd596591e0e8fbd1bf7bc2fd1918be6c71ebe0e091548b75b04f25e6a7", - "5/49": "f8919157695acc04cfe320873fd270eeb861fa96150defe7fb6c94666bf8fe5c", - "5/abc": "b32de5b882439b676eb481cbe065ec0413ed2fc9bee7f8025e2b64b59519c502", - "5/test-seed": "0420d90aabc4296d173ec7e26a5216f8132aef697930175064c97c1f5ea2caf8", - "5/a\"b": "29705fbe9fc6ef38019091b6b9a255dbdd3a4fa4cbd0f12ec7c5cb52096bea72", - "5/รค๐Ÿ™‚": "9ee5e11bc628f4de173487824e1e5a9658b54aaf3762806497c1f1631eeb3379", - "5/78d11f0d5a8bd74e510194e16e4b352a": "da32f8401a0450ca3fd42d6e42c84b677c592571ac56369976487181fabaa6f6" + "0/0": "6a2a8230adc63135779b196ee8fa026fb1bd442a192945b9a66ccc5559c30e90", + "0/1": "fa2495411523f3945079f1d55bc4e9fb6d14e1436d66c8461dc452e7df072fd2", + "0/2": "7bae9956a3757dcb4de2c9b5eb614d0b7a8f6ae855f3a9c9149123b38a281a14", + "0/3": "ffd397862d8b8e858828adbad80f1bad5018bd8b04b3c9889fa7113a6bf07d1e", + "0/4": "a1303b14b9549566ff16439b6368311460ba64d85bdaa4d2bf0b4d28c2f5ad82", + "0/5": "6e58b0a2c4590f299707796e210b68f5beeccd964b91a25f3e7a19e8525f2c18", + "0/6": "ddff7dbf75f4111d7bcb42bbd71e6ae66513ee7d9101ac16c13c42e968bb14ee", + "0/7": "ce265ba2e3b658f58fe493c1c660881694c20aff61d77f18731067bd7f3b9998", + "0/8": "7161fa3be95b80cbfcf5b2ed5a075ea716c11820c9e0a1e3da4bd1f4c2ee1049", + "0/9": "4cac154ca2d00ad4d9f96a3a80c9c084f32664333c6f287425fd5383c52c6705", + "0/10": "725db417d7177e02c491526a937efee894ca1c0eaa64982e76582e1311a18d9c", + "0/11": "72ba730e92ac2af27de97a7a324c372142a8320186356000d2b605a3cff456e1", + "0/12": "522efa67d8202468803642668cd0971a31420f8b8b0f18031a6807a0a05557b8", + "0/13": "a259bbaca42c2c4228247f589211e7ce261f6fb39182bdade25da6caaa4bfb13", + "0/14": "c11280a7e9f34aa0a84c73f358a89c63d520b75b27a8048a2473a449fd5b639a", + "0/15": "7ba2099678bd3021477654a8f7c37d31ee1b12779f061c09fbad173d964a14ce", + "0/16": "d0f38ee186319756a27b81c1dbc6f27d49ee1fc623c58a6db1da06e4464f4da0", + "0/17": "6d4677e2f146764d2f0584a043a3f693822883df0366a14c3580042b500b811f", + "0/18": "0130088e79896aeeb5497db31e37666ef5660c89b961a916083e491a97b8e180", + "0/19": "27f21a61ef35234ae1cdafd8c0add28f1a2d6c4737f5db5bcda592c957282e0f", + "0/20": "4caf2187cbbf6f4ae6e5d20128603a7f258e473f50f42e9ee223ab57f5fb39ed", + "0/21": "ac3c58fbb140894c275ae73acd62b817e53aa5ce7a9e0638d13cb4395e0e7efc", + "0/22": "153f5acef82d2bfff6ef02ceb12d8d3d5c6f79f1a8447371bf7117833fc78c4f", + "0/23": "3faa428150b06037df8e8dc720147d64c9d7373f5c78f09a3ed47b98233f7aa8", + "0/24": "b515b7d20838c54a62c9a34ec3059d9ae9b910425216f01a712a1e8be2b617c5", + "0/25": "065486b23d2d507c8bfbd8bc1829f9f270caec2df9f3840089c919fd4cf3cd5c", + "0/26": "6a2628490f1388ff7d995d1c9fd3cab3d6fc311995e69bdf8eff0d41389184c9", + "0/27": "b76b519eb3cab3f82bfdc632c29905bd2f1ac4d8afdaa9de4f5db54fc1616b4d", + "0/28": "dc346bf35185afa006663060d5f01ca2dc1b5ee8ae67b577f8dd1e4077b6a393", + "0/29": "89b74277730712d81878013cc5308810e98c67902208a51410c496135b98fdee", + "0/30": "77a2eef6bb02b52de1f03c483dc3f264571551b628b1c1788156896ba6d2b4d0", + "0/31": "1bbaa7980a5d3508fd0b2c7acb07fd1f75f70cee7ff12047a25ed12b769fc2fc", + "0/32": "50f572c597a6f33ab89eea0233a1d188aadc743646f5ce78f31182aeb21685fe", + "0/33": "bc563af190de6742871d1c6681abfde4698c04efa32f931dedcafbd6fd21aa52", + "0/34": "b5bae26fa58f773e7c1626e9e5b1c7a5476c3f462dc55b470e3d8f93cb4bc322", + "0/35": "eecf2232772574746f68592f56036efa855a82a87df84bd33f92467a014bf6aa", + "0/36": "3359003b0821f8a79a43c2cc5f0382449e33278f5216d75e8f0831c346a15826", + "0/37": "9165759d3812ecb712605bdcd8efdb84d603995ada222b1a868fe62fb380ecd4", + "0/38": "f205e1ad52340947c8fba5a48dbb7bc0e941e76c12dbc94dda84af7c665d1afd", + "0/39": "a286558a7f9b202638bbdbd4eaf474667460fec84b898ec505ab7f62551d9e88", + "0/40": "e518ff0fb929babf56c2680d224568b9dd09844ee26b9ff89ac93ac7a048bd29", + "0/41": "cc3ec6043ee032688e8275ab66394cbca258f50da10a9b4b6ef3c059ed9b4d0b", + "0/42": "3e77aed8bdf07063adc18f41a95fca2875fbc5d95f92139bceaa38f0adcc24bb", + "0/43": "1d731d756f5559712d7c69ffef9fd8f02f37dfd90af4015ef280027516c2299b", + "0/44": "00e4c2f73eb79d2ad8ae22602904a5ab4c89d2df50f49449d6bfb0e7f11efaed", + "0/45": "e191060a3af61a54512b90e25e49ef7152a89496a3b8f8f870e4f136258e4421", + "0/46": "4344b2971f04ca8f84d8d1830e5b5aa18254dccb9ccee1e4b6362b04230e7326", + "0/47": "be4f90fb385667db0fc892f141f283be516df9a8ac12c1e75c2aa54764fc39e4", + "0/48": "43e74668db4100a93789871369248575266777f5cd7f7da98171dac87e8cbe44", + "0/49": "f4a8c2e573968d1a92a4efae6f1eaa51a0c95fab25435cf46b4695af9a5dd35c", + "0/abc": "f2b1d79fc14e8b52db22241164adb69e035bffe58a01998273c3a26130a01096", + "0/test-seed": "c559aa8fc7be1c4611e170092ba6d020bc79a784cf5db797769b3f32cde0324d", + "0/a\"b": "262fd0607829e88b97bf532a95d3be41cdb3b2740a8e104289a224925ed0e69c", + "0/รค๐Ÿ™‚": "75f09b5d28d5e71201005be7dfb52916822e35727cbb5e625cf95c7e20818c8b", + "0/78d11f0d5a8bd74e510194e16e4b352a": "9c18433a629e81b9db3060e94920ecc853de29d0cf153416cf2aaeaef984ca21", + "1/0": "98ce0ab6355ccac2aed5ff08b1364e3ab5d127d2dbddd51d627857a217349525", + "1/1": "4aada9fba1966620c8fe4ebcd4a9160c93b1be1cfe6338da423bba085ef53ee6", + "1/2": "e4eee6ea5e6f3c857e71f1aa8437a85cc40108aa460cf8b000667befca3006b5", + "1/3": "7fa6cbae2ca6e4e16ce1da66e75000c371161cdbf0ea23c96f16b9bcf2ba37c8", + "1/4": "4419388d8eae5e91a6a5b7e444cd09156248b8b0d98d447be9a028578a7cb688", + "1/5": "a18672a6c5ff2557e1358af7eca00855963fe6475cad2eb0f570390d87245527", + "1/6": "7fc39d812b8aad144b6d171a421a4c161e411db7eeadc6b728266e4b8a3761f4", + "1/7": "1854c5b3536d820ee89ab91fc2f1a22edfec9484a004d7921686c8282199105b", + "1/8": "ae3090cbd6d52333ec861db561abf39845782b135d191ed7ced7bc7605947bae", + "1/9": "5370a0138b2772cf73919fcfd53e7dd2c2382427f81547a09a86406bf4402c21", + "1/10": "b84f52a4bcc3aeea13f48744fb500a899c07b2d193fe901b90c8be5fa612e27c", + "1/11": "46cf32636438ec7af55f9fa045b56d4cd28018d25b34f91b478000f295965a9b", + "1/12": "85400c0478ca57a3b4c61c0a54356533777a39a703dd13fe9fd05f6de5767d42", + "1/13": "77ba185cbcf58dabeeaab448794c384ac96644489e1ba1320dbab981d2b03c83", + "1/14": "0c36d136ffa84381435549603e070955be9f758af8e34e728c3cf07c48c75943", + "1/15": "400affd0bd84074df3eae0786cbcc77ecdf7caf5f3bcffbd0d02daeedef6a092", + "1/16": "3a08dc06650a0462abc584bd15697b7637a7cd0289a092d9488bca16613cd7a4", + "1/17": "820c997866efb548ec567f9d61b5a0441033967909c8314614b209db172d7ca0", + "1/18": "8c61dad7d14e566eb5f0cdb2c7cdb1a33d4e3f5ba80665d44fdf221e9f19d7d7", + "1/19": "b0a8b1c58c7783fe2b3141b58a29813a4c9bf380ffdf102b1f5f13a92a7ebf7e", + "1/20": "7026ee4c971848b80ec06f3e574d3c381c0ec7e5ea260ea10c9925f030fe5a79", + "1/21": "6bf279c7f4f822d5625e0c3b3385bfe8e50606de1a79121eb477c91d4ca20101", + "1/22": "881b7e225d760d750105480d69191236026f6dfd38bce20cfca1567200b2810e", + "1/23": "8abbb7ec0bb2fea67416948a893dd4de57672c55f8c06a49da1417ed5a532ce4", + "1/24": "9c95de85b6859edb8d19db01eb6d885a5ce84831e29a22f101aff2a9e41eb363", + "1/25": "6965c95194c3e4b701927fd46b9eba962ca6551a683055176d4367340028270c", + "1/26": "401a0df374a1b1ddee39fc04b98aa40c44497e14f688c016c4c8608a9746b3ca", + "1/27": "2702eef20ee5ebc33c1f693b43aefe4e6726a619f1f22c8685209cec43831699", + "1/28": "d3376d7a5aec6deaea23361cee527bd11e27a20f487a675ff82db0142c07f1ae", + "1/29": "8aeee87c2178bde78785a81e914fb598bd6a4a515b7707f0b64070b49ceb872a", + "1/30": "ca65568585829589c303619812f8262b3b1e313db2686c2d814d8154412f4c77", + "1/31": "3b9719df2b5b6dc043b55733d4e8b1baff797df86f5a654b883271d3744591b8", + "1/32": "ad9c340093b3ba17c7c2752316ccb61e942d34910bee340f1b602718237bbf64", + "1/33": "047efc3c292d273100e1794a128e366db3e61cebf8105d67edfa3d4aa751d349", + "1/34": "b9b104b546a98ff2373d9b825841b38ecf9916eb99706233163be6e57c676069", + "1/35": "a9227ee5986d31df5d789697e12e94bee1f911d41e047f3b573349487ba2caaf", + "1/36": "3986bcab70ce08ff2f7e7885c0fc6b2b67332c8bcf4153dbd9244f2e570e6c29", + "1/37": "cb535aa9d4a2cfd6fcf9094e24effa8302bee8b29e6d20a1d6685b54bb411af5", + "1/38": "695875d8d331c8021e24820de7c2438e687503198ab2bd9619fb8097d4bd6a66", + "1/39": "1333294e296cb48a342b2888d26b27ef9d6755ecb8c3df49b8044a4752910625", + "1/40": "93c51a66bc6d3b0ba5bcf5188368afc6c4e9ea6e035d649e2d47effed248992b", + "1/41": "4c757d35aecd1c3f59a724437811b9faeeab9096b4cf1096465bf41a4d3a5d5d", + "1/42": "0fda0a6f8b850d094f31f078811556933db8f3fc3763444907479a47ff8de2fa", + "1/43": "8d0c2f68e7f073df4568566e42cf5825265c0a181bb5f8c2aefff6dc59d13785", + "1/44": "72782134ddcb0cc35aebf9f45f3a7036bb56d695d19e59b6836f02d699f59333", + "1/45": "b6a05346e34c659e7dc20824e25d343fe498d95a829ec7a70e14909c8924e8dd", + "1/46": "bab506bd32c134072a42bed0e7dab19481a8eb234d1256cd741d518a015d8143", + "1/47": "9b9142084df22658d38f018c8c9130fbea5f9048c76018bca7c73202fd02f14b", + "1/48": "3241d2ac0d22645f5dbcde6725a2bb489c856fb8aebda8afdb095c464c295c73", + "1/49": "3068c48405d3b9c45d520ad95149a11b1b9af6c4d00447a1d5835dce1a8b44c6", + "1/abc": "c4e12dc5578dedf8fd04c4c1861802636de0459de6fb68fc1aab7fd5d816245b", + "1/test-seed": "52f08c52b8e87b161f4d3a08b50fdb136f44e3fe452324cdc8a14528767cf654", + "1/a\"b": "265ed2ec2c5a4a9f775e552d68d7b302449c8d58b0c2f014134e2f8d9ca210eb", + "1/รค๐Ÿ™‚": "22998f0e9165e842e6cbd8f20ecbe79b354d7cb4e1b1e819fb851d54e61a5174", + "1/78d11f0d5a8bd74e510194e16e4b352a": "4ee03ba096321226a9a8e11a8e66b8bcddf90cb65ac1f9d7d0ff26827b3be704", + "2/0": "983b6d3742016e584d0848d881f254df46819c29e48f75c8e68a5e5d4c670349", + "2/1": "2ec8a03865319111f798eee4147158a7c15ddb093d4ba0822aab1bdc4137a821", + "2/2": "24cd7fe3fb39bd6fa465e773c05879b4b1fa5241beb899fc04a71fc09c2ad612", + "2/3": "21a03dac1659c4d8d494be582bde721259be5c67b5a1071bc1948007dea12e86", + "2/4": "67ed7229bc23d600be12f04170c166ff604dc9adcc1cdbf012ae7afb2893e0e1", + "2/5": "893bbd08e12a206096efaf00e5438479895481431af16ead75ee056251a8ea3c", + "2/6": "792084bf747e72c0d25d6b802c15a88379b54e1e9065681580337c077a7076bc", + "2/7": "fea319f66d6741c951cb9a605804c2236b674183a7e1e5bbf588ca29ef1068b9", + "2/8": "141bf3478496f447b18060534dcd5f2dd5065cf75b15f102b0f5c368d838af44", + "2/9": "9bd8b6c9b054190907a700b7a28243434470e28072a5f123387aaac6387c9ab6", + "2/10": "2a6997dfcb32870c9fc0a17d9c65006550a94602b68089fd349d81315e986863", + "2/11": "8e25a0f56a3e9dcfd41dac67b14eb46ab3dc8b88a92c83535ceb3d817439bd5d", + "2/12": "47f3b9c014d4b1d87a0731bee8f5e3632b2ea4dbadb4802d66d92569c531edd2", + "2/13": "6f06a44c4056ab3ab3f0f862ec855541812a38daa67e38ebd312432e318e0c86", + "2/14": "83d4604e6a78be1ad8377ab0ef9c2d13160e80e331106e24dd6b2686ec11317c", + "2/15": "7c9eca258c72d58247ce1a0dcc0971687e2f2e0d252ab85d1f0231f8fb8ca099", + "2/16": "88be212a8375aadaa80cfc05351485ddb1f8674cf8a74847b44bb14ccb1fddd3", + "2/17": "ebc27a3552704cc27a8741de7d63b77dc97c8223ff7d4d8b7906bcb0efb014a9", + "2/18": "55d8397c554474843bfb911a086a53dd7d188e75361fe9164e0aad0043af81a3", + "2/19": "965548ecd9b77c01824f935c96643fcc0ebd208468f3e21b42f90fd32d474014", + "2/20": "8a21a6ec87b2e0caf5e9b96a02c0e1bd947d922fcf86ca2e39ca0b7f5d45c5cd", + "2/21": "f9d108c781778d1089580f2e993755b9d5d8ca5f3f68feac2e10a559d646d05a", + "2/22": "af8224f4d3d9d7199d4748584d9ef13c4cf22ee1947d3fbc78196b04ae44e4a9", + "2/23": "25178852c89743842bbea563c486dad0b285f3be6c25097212a90123346b82d9", + "2/24": "19192528bdcfe7a36069454250ee8b586b072d5506b778160b8bf2897a7fdb23", + "2/25": "2c2d9b4f6652a20cf3147afd758901be52c07700b2d9d4ba83491c168dab0893", + "2/26": "260519cac54eb936ba2c3419896fbaf224e4f15ab93fa05001dff15f4b5dc4b2", + "2/27": "7d993e5c7ed324c4424243b8e37f79e3744230fce831e53bae48c37bdba00dc2", + "2/28": "296406ac63cc3d9ef29ce467da0e1a6c4f612741e451cb3fb6bdc54c502f4cd2", + "2/29": "21849d172ad3ad0c285c5e8bf785b7b288674786762f244f22d44af88a9d9573", + "2/30": "4d17eeede76c7346811375b044e384d1ff3b432ce759ae1b2d8f14ff881946b7", + "2/31": "e8768569a0b6493c484f7966144cfc0a2b1951d7fd866ca4344008b33a51cc02", + "2/32": "d67ec5f4469f377190f10306e21d4dccef0fddb9f12058a0c30ef85b9fec87a7", + "2/33": "489e6e6c1e3deda2b4e102483a7c863eaa928c43161f9bc73a2b9d734a663e4b", + "2/34": "5b30ff7eb3e3a90fd70fb784050d5fd6cea339186a9eac23ce46c30e6eb22d84", + "2/35": "bc8729a4f9b9d8cc1823d3a260cffab61ea55d3f5a0231823bd896ec65eb70af", + "2/36": "05d6ae2b9c3295c71be57554b630c720ea78de644d2e7bb7a1f65e29937c76db", + "2/37": "639f7b990f2ea3eea30a9be72b3e7d413deb38bc4a2b470580c162b8bf0c4985", + "2/38": "519bb868f3121ee5c962145402d8e64b31935e6f3be8c87af0a7cd1d35c4559b", + "2/39": "f507f900b62f43334736129966dfb12e07f9272786cf77c8763715fd6ff3b3da", + "2/40": "04030b05d2f0086f04841a99ba1b2cab181df59b5def8a9b68d42958b8b15a85", + "2/41": "3babf60721ab61bf4ce0750aeb705344b66051c1029d6df07fb50639d025720a", + "2/42": "d85f4296ce8416169f9d1921c47b9ce828afc8e8136ed2a2b5b2ad2b213671c5", + "2/43": "8ab95c4be51684d8cc74ee99fcc82f74992fb19d40026f8445d7d50349650489", + "2/44": "ad609f7f5b21bb5343d01c59d5f37cefc6712d58b7843271bf2167fb36b4d732", + "2/45": "fe93ae4774129a6403da69442937437e6f64c4d0c74fc321f88be0cbb7083dfb", + "2/46": "883b2b20da90c5b35c100c1b86df2516117ba44d77cc1c95f440407a88750199", + "2/47": "47da44aebbd71ba1a7dab3de460e143e830da13031ebdaea80426af9a0919175", + "2/48": "c13cdead92ee6afa1d61e368137f30d7d89a058e68a0ebcdc8355a66376ca321", + "2/49": "b78141a103597e85dfec74ef8aae57ea392c282354e822bd8e45b59d6c5391ad", + "2/abc": "2d08b462c128fbc58c0d984c5beab7eb8a119f00c0780c3b027468497750cee3", + "2/test-seed": "aa4c5fb1192ef9aaf619e487c25952c6da82a38700951f1baffb0637a4568818", + "2/a\"b": "cc9317c2d4f1505d518037af913690d12b277d93c5050b8a55adee0e34fa7ecd", + "2/รค๐Ÿ™‚": "083a1faed7db501c24741c89caaa5bc81ac8990576ed9b0bab1264c0f16a2adb", + "2/78d11f0d5a8bd74e510194e16e4b352a": "88bb961fa06ca06302614e39708e09cd344978f8cac21cdbd2735a8f64a2f481", + "3/0": "05c480206208f1cd8197938df4cf9e517c82eaa59807e5f924d6d295b86dc81a", + "3/1": "bf24b9f14585e29306dbc79818b21d0cbcd11489b44a45297c0dadaae444d352", + "3/2": "441c116cb6f46e66804b99bae0858adcf4ad12772ad27e8e0492245105a1d700", + "3/3": "87c151a7a9c7945841dbfb1707de94d97834f9154e25b747dfe0d17ab839f2ba", + "3/4": "105c868b953e4f9592ec13348bf1ca39306eb1c8c16841adaef8428f7315749f", + "3/5": "bfd3307e8ad92c862ca11c7d44baeb66b16aa5d4ff54f18f1c760377e9d2a22b", + "3/6": "e6d0c1b275777ed6e14efe32aabc7c2e6f86e192f30064efe238799842f77b1d", + "3/7": "348041ead3605e5ff6b4ed6acf0b3f94bad6d87ab962f83bc1ba7eb2652ed772", + "3/8": "9fd33ced2c369b573c45dc717587176845b9063e61a3b369be42d9191114db24", + "3/9": "802476920a0c8a910b6b5ca455c4ba1fe8627ca02022b82b7c267a347504a930", + "3/10": "40ccd5e634604a55aea5db5ff43c56752859536833765ce4277b5cf89453c2c5", + "3/11": "56b5aa2f81e0c50a0818cbe5a4b9eefcf76dcd4515cc4cac16fbf9c07ead15f5", + "3/12": "574971573803cbdc3e7de199f7dd35690771fc96b4eeecaf1e6e9117a0390677", + "3/13": "40858ef8f194f34d26b89315f7544311bbd85b1802ac75b73d891790135a4056", + "3/14": "898c5284254cdf19575ca936e1e9eae30602344ea30fb6565f04dbd9eb83d064", + "3/15": "d3ae059c909060753089f5096e9f38ebce61de66010c2cc719bf574e98fba581", + "3/16": "8e89c4553dc15bea8943fc9a349ad3a9f86613416e28f8c2bb229935f453a668", + "3/17": "b364e83e792ada3f3684c1392d61755ce989fe9b3eac2a347730ec4bb2aaa5af", + "3/18": "9f2f83830b33f281992dda623eae38c588ec5519c1cd8ea8df34d26fea1bbfc5", + "3/19": "74ab800598739205cce84811f757abf6974fa5b700fde9a7c2265603532ba880", + "3/20": "59de664fe23e88af3d4eb0421907d10da3b53f814acfb471a06bc029850b90d1", + "3/21": "290dedf3c52d77b288038695ede12ad3264aa4439229caad8c3e7cb79d964464", + "3/22": "38ff583094adf270f4fd842785f5c4e0cb660de1e9c2b4dfbc247939769e95cb", + "3/23": "370cce3c939622a487aa5f0c543d6368b9d97bc710d6b48fd6a1877351240764", + "3/24": "7b2bdc5b8541894de7cd87005ed189055f028a017c2daabd401f0ff2bea29a9c", + "3/25": "853a8e609bbe1ca5b2ebe38b60b472c0ba2af684604dc936f801b54d8590af7f", + "3/26": "65ceb773236a88181e021cc57c147f8d1d4aadc7b313c505192513be7843c5ab", + "3/27": "a64c477ae68007c9817b0e946f7ae265a15dc954bed2068559f3857c0675571c", + "3/28": "231d3e5c759b8956656116d4f95fd8dfe9d03419ac245a0ddfb444afbe7fb59c", + "3/29": "d26a7a76cda80200de7db3bf79bbc0070801686bb113d48ae18b76bae5280751", + "3/30": "f4f7ab88e08ec60765ccb5d87dbef968e3d29056d6d0f0798cd29feb00823b5b", + "3/31": "99ea373e05c728903bdadf752df933739c6cafbaf0149f1a074027692e3cb1e6", + "3/32": "26b2cb8e14700d30b2a561b37e9c18e19bbefb86fecbdce43a67830cb155e711", + "3/33": "c755cbc0e5dab160fcf62798a9747d554cf7785d0906dc52732e890a2369e0f6", + "3/34": "575acee799ff6837533b286e1e3540e1040603758620118e37a74ade6a388be7", + "3/35": "4a9faa2801474e0601f888a8edf24efbcaa4211c98675ed57c4d211c5cfb2fe3", + "3/36": "a9d9a2b54c5f114c4784b2767ab52f3f5498666991ff5833b121c80452990f39", + "3/37": "f73fef14e5d88522c362fd8b1f847d4693adc8d1c1a6fa8828fe713834a276ba", + "3/38": "3a4153190cf7ba72b9132b6435dc29fba5c3c23a86ad194a6e8cdb86ccd72648", + "3/39": "e55c58fdc4c491bd83555a29662cb2a1b3ad82adfdac7592ccf9bb52d2b610f3", + "3/40": "c14b6d8d913973aaa90a61acddd3f1533147edaa77366766d3d3c53683903852", + "3/41": "32ae6079e71677e9d704d619edfa83b7e79d70cc280c8bafdb9b7159102bb871", + "3/42": "7b2e5f31c82f01992267cd07997a5fe8b780fa9dff7c2d47a3b57379959788f6", + "3/43": "cd096bdc9ef82c2295d014a0e9eb9e001c9445c0c50f976303e55baa15057388", + "3/44": "64066d6e23d7997e977c19aab6ee81697402edab7ebfbb0f77d4bdd822bdb8e2", + "3/45": "648ad005bbecd37949e5c5cfff29e2a886c07b6d5db3c50a4874992937eecadb", + "3/46": "938f15854859e46658594230f31a2c31fcd6d0be68ebcf16378244068d2a4d82", + "3/47": "a4073fadccc73186ae448a5a99fa8dbbae227ebecbabfeb24ee6ef9ceded475e", + "3/48": "d5294b35893317fd803d870992f9045ac4cf3e3e88c472e9198a8c1d289edc67", + "3/49": "56291b95eea219f5a3b1191cac7b7af2b9b1366af04f568edb4f9690d413bb73", + "3/abc": "7a061f10d8b8dba5cd35e6d476a679707a746c4c9c0be7831173fe3aa46456e4", + "3/test-seed": "d095841a27f566b759f0f8c64578f4266215430cebad46c1cc90915b848b9f93", + "3/a\"b": "678280656747534cf520e7e65d6761d27c1bc866500af84915a13270b1faf3a1", + "3/รค๐Ÿ™‚": "4c7b1032a40c722f2d156d6ab57a73f5eaaf954f83cc5e384234cbb83f50eedf", + "3/78d11f0d5a8bd74e510194e16e4b352a": "ac1d1fa35b61c1ce50250221ce386206e0bf113e1e5d129c9703ea8cae1bce44", + "4/0": "27fea0eb06b8afbd6246787843a038250de341f2a3f8c9c2f98cc943c644b6b0", + "4/1": "227d28462433db24cf18476831b27688138a6ed14ea92f02aa48e06ec4b5e5aa", + "4/2": "e91ab16232cc9235ad6d84c2c952d1c3421d3b638dad061d65714e03d13c0502", + "4/3": "38e1b18349568e96fa73dff41514437bc9860dad562a650173662c4e1a8e24f8", + "4/4": "1500a123c65ae13145a36d25a1f5880ccab5721ecc34512e5adae504c31d0196", + "4/5": "3eb1ccda9baa94c6b44f7922e5a06857c32c2610566453f46a5dbfb9754c8a4f", + "4/6": "32493ee46fa0b158ad78fa076029619d333212b1147f37125c08db178e7b8938", + "4/7": "1f2cd1084fda59f65f1a105dafcfbe4b74fe27bec115e7950000a8b4ff57fdbe", + "4/8": "e0726e725a2bfa3c33426dc2ead74c9ab512ac0aca02139427cc9191a2e8be59", + "4/9": "156e0c5dcaed7a03a5c904eea8f0ccffd9ff89a6713f097887c60c9d41f40c4a", + "4/10": "7c85490f2637b082f371d4d589af90b2910bbaf298b764bea56a3bb2adf2c5c5", + "4/11": "9e1713fa0a5a7db85c599772900e1dd8280c0837c5a5b743be8132028a73051d", + "4/12": "1f8c8facb160985cc6b3118b3f21f5dc245e6176c7b7546b14495c656446395f", + "4/13": "bc93a3d625f868d21d7440e6f0297b74e8e381c1a55be93da2222b897a155df3", + "4/14": "f05a17a01199a85e7d95ee9cfa7e1c5f035870f531554a479e6639ceff598458", + "4/15": "4286a4da0e9dc6686321a42b31b7cbf816614b71ce2c62490d4e769073d1a6c9", + "4/16": "4d0ed545c1a848977753e80ce44e48c7fd326c5c563139c77b50c20eb0bb19db", + "4/17": "7350af26be53e77de49e14f7add121dc0a6f7d840fd49bac8c839f9a92227007", + "4/18": "3bdc71025c9b8ce8aedc99edf413589fc64267831fb1e6069b39b2d7a3b44cef", + "4/19": "97d5c55ea4dc745fb2f37e601daab63be46968d8165b1ba48555dfa01a64b00a", + "4/20": "c985883371acd5e82ad1315649f94624ea6c7537f0be1d4626f98be25fbc605d", + "4/21": "ff0673c26e70f74d2752b80afc2ce64b72ec58c74e5bbd21e2b933b9a969b5e7", + "4/22": "bd7c95feaa565685f0db1a9a0b22249e5c6118822ac1f525aa0b3848f0ed22aa", + "4/23": "6d907917724692367746f38617963397d52d96c1aebc6bc80eeb71571eb44f8f", + "4/24": "a36d1dfd570e5fa60d407bc26a7dc7335792800e4f4ed607cb6debbd15d60665", + "4/25": "7151b5cdb56f129bfe86c42a2da828f6df8374b0f814d07d7cede8f40d358367", + "4/26": "cbef6b6445a822308b73571840b535a0e5a8b9f5408010bece016247b06b8000", + "4/27": "00a408a6abbcaaaa59e7724b68ec8f59f657219c12046ca65f3189b778faed4a", + "4/28": "84ea4b185dacb52a32e8dd34da84c648067b9af17608218d84fa320a4d711d13", + "4/29": "0de46d7f07bf49bc55fb325a9f311ad61d9b844c2f81655bdf0300fed387061f", + "4/30": "8b40eb67ddfa4c604c2d76b813542d53dc42c32f292c83e382a4b109b0da02d3", + "4/31": "acf845cf5c2578328c93912d6308c8caad03aba6d024f7f258c1a7927b369475", + "4/32": "593fe13dcccc64f5c292dc42d0bbf64f5718ba03c62ee4990b275e5a6fc921d7", + "4/33": "93f7d7b8eb5f674dd268da81c5f2876a5c6e1118b0a6f7a4c086709044b91f97", + "4/34": "722d364ce4b95940a2330b0cd9cdbe4a290c76acb3edf7d1b1cf1ca3d1bd3806", + "4/35": "6db275e801f85acb1f3883cf5d91e4b1ea0284a6cbbec45153a280110cd4cf40", + "4/36": "4ddc6ff3e5827c064583b3abd90b9c80a045c68ebecd44f314de8a21f8ffda8f", + "4/37": "a9094f6d77c6dd995c4a2ffa6e739ace02873cd05b8b37b8790ebb9bb0baff6b", + "4/38": "14a56d396571eb55a721f91c5ad1503cef6beea204fdd9f43ed8da2e2b261de1", + "4/39": "9f1777631ec88b2b9e363bdd456f8218e35892339564b94df504405f708ce0de", + "4/40": "5ff7bdd17bf7d75e83d206698501e1c0309ff612ae136f328b935790e4c69bbb", + "4/41": "da22f0816f763e1d015d543535e5dda362064caf86f39fa53d03036e860b0e09", + "4/42": "338850cb425785b2519198f5fba603adc28f1f91be81560ff08068d6e4c89181", + "4/43": "d9a61e05a8a8ab0f9b3eacd83c29b412a85937f9e10a43bd4385df16a4753ab9", + "4/44": "5caf0602e6bcb6c03c0e91da40fb8bec9c9f97eb258e6f42f4c31ad0ca1ad50a", + "4/45": "da9f0c48f444a6e7679ceed756f5cdbc31754c8ae7ee8baf8668c2596264c393", + "4/46": "3ef95a047cd293614bbb27a18a88bfb859c3f213c4959ad7ce2b1beb0bee056b", + "4/47": "3a90f46cebe37330ec88f9e09ab6c529e04deae2f7a8889204f547979a03d876", + "4/48": "9cdd83e60f7cec53f718384eb3f090add52b761e16d2d61435549eb191080fb3", + "4/49": "46418f454e767626d366763ad65b368381deb0c34b168373a7eb4f6f9d40857e", + "4/abc": "516e66ab0945de907947e1c08ec871172867dbcbfe0f5a40a13ec581d3dd3122", + "4/test-seed": "5e2715a3d40a073ae55e77148336971b7a7ab2dbaf975a3aac5f970ec0e5f3a8", + "4/a\"b": "683b1749b73828a8795c9529cd50cd4d069ea3897ea2f2415090a22378f3e0cb", + "4/รค๐Ÿ™‚": "f1cc06b409b6adedefcdb2fd319b0c0bcdd6ff5b1a24a6adbc5091fbda37c092", + "4/78d11f0d5a8bd74e510194e16e4b352a": "c43c5e9b05f6228549adf3954b293b25b60d18681f8937691f84cabcc460045f", + "5/0": "3755e7ba006f444a02d65bad1e767a89d2ddd662510e83e295d3e3f0370ca21f", + "5/1": "2c25e47738d4a00bb2e0c0fc774e5101ae9054338d3d8b7f1760192a35dd2c90", + "5/2": "6fc337c0cc51b1ae144e93ff3d875c0ce908d4541c4fe596b99b0d9e5d0174ba", + "5/3": "8ce5147b203fad87fdd3ba678cdcf450b1a85250229043bbfc6dd31785b277b5", + "5/4": "d45d94270c7da0673ea48ee8aedebb5870b8df7c74a0e23016a9791957b329d4", + "5/5": "ebd5cfeb1b011f9c97f6d7041b16cd5a07a71f6178c46968b803b9345c468fa9", + "5/6": "4742e0d82a270bf95bb39c278d20f965fb49bd514bed00f4db184aaeb18bc8bc", + "5/7": "d9ff8e73b13df833f6df65bd89785c605258108467f5ece572a1eb7a10fe0428", + "5/8": "5d549373abb6594fb5425315d5928774ef1660143fab88f3373f0da9b973fab4", + "5/9": "62f0dea6e7cf0a9291db538cd8456b4a1b37b459b4b1072f96b789c676100b42", + "5/10": "ef8cc2e24dddc55b091bb0e92bdaf66428955854294e4a28349875170e71dc11", + "5/11": "e44bc25e8d5521877ec728de639e00f027336cb02214e541efa9665067a62c5b", + "5/12": "f636ab5f5a2924575ab597001b061527c144c4fc39c35a7edd3e4186c2042c37", + "5/13": "afbbd8111f0e8037eeb14087e2370e72fed59b7f4d7b929b08317adcc92c79e9", + "5/14": "b6746f58238dda0c6e4722c3dd306a3f3004d12a912cecd3d22f467f4669387f", + "5/15": "bedc49d5c26bc2c1215638acbce4386ef29688dade84ddc3d871d1a1db1451cf", + "5/16": "98fbb16a72ecfa8d9f7c92770acecca02000c6c465f895f5acfb1711330783ec", + "5/17": "919051fc1ea2daf5275ec68a8cb3a5e42ed87b09ab0614d134299bc3bf338455", + "5/18": "ab7d54a581cf87bbcf5d70825e9a5d7b01f267077598f275fa1d40dfe861b6fe", + "5/19": "1056857b654e5872b26937325c3650a74743c878c755499e490ee244420fc7f5", + "5/20": "b418c295a4602f8ca5cb6dc5d23241938d27057f2b1ae9ddc6a9c53536a2eee9", + "5/21": "f65bf104e20d225b646ebb812e9a7ef8571829f7c0e931ba699f53574480255b", + "5/22": "5cd9a8cb6eaeccb252db00c8231021bc43e3dbb3c85c26d1a11ac7cf67aaa5c7", + "5/23": "cf96ffd2954726fd00390a5d996e1617c43747d7c3c9e8fa17ac4d59f40f5053", + "5/24": "a93f79ab143c3810d8ec4066e0c000281bcf06da9c1e1026941dcb97cb2b414a", + "5/25": "3baae944d30891bcadac6f0dbdb793fc9f4e3cc32a4888ea8a197e2f16c5c97f", + "5/26": "eee4a73c81561fbd3b286553bfe247654401e4f404a74253fe28bcd86f3f3cac", + "5/27": "cb60fb3c031aed430832d341af9fde8c6dcccedfcece1303512279ec685315d0", + "5/28": "1843f5e992d8d1a3cae65febba77fae29fe54cc277ffc83e3ab077451a3b0806", + "5/29": "5bb8db916eed69d3e8e1706cfed3ec71280d34b6049c0cbc8419868aeab0c68f", + "5/30": "8ecfce2c64798fc82715b3a95574ae36211ed48a433181f82a692fd38aab51d6", + "5/31": "d8aa5d7476c021cbef372e6a47c16cb5689028ddd9fbb8c2f8f7e9fe177af51c", + "5/32": "1656aa7beaf1e7dcb3eb654af33c0bd54f5d1e09ccb7ae35fc34dd3b266a22e1", + "5/33": "32f8f9e6f751dd58e12acbc2dd91bb247bfdd74b7a9dbc6efe0e85000073dd58", + "5/34": "70c1f5cec0dbfca55990fe6e7ee6d3da81015098e5fd3a8f53ed32499703dfc6", + "5/35": "a43483da892f1eb2d071be49ee580654a4f9ac83021a7cc930b874329eb8cb6f", + "5/36": "e918b9b5f4b53640e5d669bc212f62bf69a6e4dc464f2c885a6f8881404731b9", + "5/37": "3737903a923d4a6a03012ed648854ac44d183787ee470f22cbd71ac0564b2047", + "5/38": "f07e58a1c329e451c9f112f2b5cdbd73e69806d5e0a606422bdcfe9af8a781a1", + "5/39": "508abaddc5d0a409e4c9a1b957d03b7a27cc92e53aba6135072b93a28b2f4a6a", + "5/40": "00df1891f026ba57fcf0be4d413fa6ac2db24dc64e21af2ba01605b4cc2bb8fd", + "5/41": "0626631a8c5cdb9885de2a9ae484c647f2e04510c9afc0642f6e622b8e1dcdca", + "5/42": "b4ca6088b4980fa520bb3a227696fb12e8715299a9a914d83ef588b2d240dcb3", + "5/43": "f78dbb52ce19d807669ab9ca04c9ed99e1f977682b2c16791664cf1243331237", + "5/44": "bcd7a8708ebbd97c1c8e34bc99f48390ada2d86730d63a9e274efca49e8d7acb", + "5/45": "b3fd5073647dcbb67859c1e0fcd5b5e337f471e8db14d44610d05583548f251a", + "5/46": "3a93b0ee097acb63dde9ed0500ac235c2b9d1a1f4d6b75827a84801bd3b07791", + "5/47": "8289475c792d60dc72454039307e861176021848f658f0f59d2cdd684ab08197", + "5/48": "acd21bd45eac2cbbd7287e82aff5f338830200924debf5b20f605260f887f940", + "5/49": "d68ef3a6a69343a54c97a9888a7d1b2af8d1b996f1c252890867ebb2396d7896", + "5/abc": "f076804684aa42aa81b45e09060e9a0d39e5726e4668c2ef28e3787250ef8f21", + "5/test-seed": "c53712c095413a62459a52613c6bde27abe74b428e187ccc27964e4ef02d421a", + "5/a\"b": "491bce35061ea09615902239599ccd96e87e4fb3179e102a1e927e8d0eecc29a", + "5/รค๐Ÿ™‚": "2e039befc5e3ac51ec3b756abf9ed3b82336dc96dc2b63bc864574a924ea112f", + "5/78d11f0d5a8bd74e510194e16e4b352a": "be5d03e95cac1ed161b9fe23024a47c11b25ba9a1f51a4616056e7159c4e8628" } diff --git a/test/util_test.py b/test/util_test.py index b347ed5..9657502 100644 --- a/test/util_test.py +++ b/test/util_test.py @@ -8,6 +8,17 @@ def test_calculate_room_amount(self): rooms = util_functions.calculate_room_amount(2, random.Random(1)) self.assertTrue(0 < rooms <= globals.MAX_ROOMS) + def test_calculate_room_amount_follows_the_isaac_formula(self): + # random(2) + 5 + level * 2.6 with level 1 for the first floor + expected = {0: {7, 8}, 1: {10, 11}, 2: {12, 13}, 3: {15, 16}, 4: {18, 19}} + for stage_id, amounts in expected.items(): + with self.subTest(stage_id=stage_id): + results = { + util_functions.calculate_room_amount(stage_id, random.Random(seed)) + for seed in range(50) + } + self.assertEqual(amounts, results) + def test_place_room(self): util_functions.place_room(random.Random(1))