From f46522006696046a841f1e45ada1acfab2c15261 Mon Sep 17 00:00:00 2001 From: its your bedtime <23366927+itsyourbedtime@users.noreply.github.com> Date: Wed, 11 Aug 2021 19:55:56 +0300 Subject: [PATCH] [FL-1632] Dolphin: feed mini game (#627) --- applications/applications.c | 3 +- applications/dolphin/games/food.c | 321 ++++++++++++++++++ applications/dolphin/scenes/assets/items.c | 2 +- assets/compiled/assets_icons.c | 52 +++ assets/compiled/assets_icons.h | 13 + .../icons/FoodMinigame/active_plate_48x18.png | Bin 0 -> 1057 bytes assets/icons/FoodMinigame/blackfish_25x17.png | Bin 0 -> 1025 bytes assets/icons/FoodMinigame/blacklid_36x27.png | Bin 0 -> 1058 bytes assets/icons/FoodMinigame/blackshit_25x17.png | Bin 0 -> 304 bytes .../FoodMinigame/blackskeleton_25x17.png | Bin 0 -> 302 bytes assets/icons/FoodMinigame/fish_25x17.png | Bin 0 -> 1059 bytes assets/icons/FoodMinigame/letterA_10x10.png | Bin 0 -> 124 bytes assets/icons/FoodMinigame/letterB_10x10.png | Bin 0 -> 118 bytes assets/icons/FoodMinigame/letterC_10x10.png | Bin 0 -> 131 bytes assets/icons/FoodMinigame/lid_36x27.png | Bin 0 -> 1107 bytes assets/icons/FoodMinigame/plate_42x19.png | Bin 0 -> 1049 bytes assets/icons/FoodMinigame/shit_25x17.png | Bin 0 -> 318 bytes assets/icons/FoodMinigame/skeleton_25x17.png | Bin 0 -> 306 bytes 18 files changed, 389 insertions(+), 2 deletions(-) create mode 100644 applications/dolphin/games/food.c create mode 100644 assets/icons/FoodMinigame/active_plate_48x18.png create mode 100644 assets/icons/FoodMinigame/blackfish_25x17.png create mode 100644 assets/icons/FoodMinigame/blacklid_36x27.png create mode 100644 assets/icons/FoodMinigame/blackshit_25x17.png create mode 100644 assets/icons/FoodMinigame/blackskeleton_25x17.png create mode 100644 assets/icons/FoodMinigame/fish_25x17.png create mode 100644 assets/icons/FoodMinigame/letterA_10x10.png create mode 100644 assets/icons/FoodMinigame/letterB_10x10.png create mode 100644 assets/icons/FoodMinigame/letterC_10x10.png create mode 100644 assets/icons/FoodMinigame/lid_36x27.png create mode 100644 assets/icons/FoodMinigame/plate_42x19.png create mode 100644 assets/icons/FoodMinigame/shit_25x17.png create mode 100644 assets/icons/FoodMinigame/skeleton_25x17.png diff --git a/applications/applications.c b/applications/applications.c index b4c24037..a36ac486 100644 --- a/applications/applications.c +++ b/applications/applications.c @@ -29,6 +29,7 @@ extern int32_t lfrfid_app(void* p); extern int32_t lfrfid_debug_app(void* p); extern int32_t nfc_app(void* p); extern int32_t passport_app(void* p); +extern int32_t food_minigame_app(void* p); extern int32_t scene_app(void* p); extern int32_t scened_app(void* p); extern int32_t storage_test_app(void* p); @@ -253,7 +254,7 @@ const FlipperApplication FLIPPER_SCENE = const FlipperApplication FLIPPER_SCENE_APPS[] = { {.app = passport_app, .name = "Passport", .stack_size = 1024, .icon = &A_Games_14}, - {.app = music_player_app, .name = "Music player", .stack_size = 1024, .icon = &A_Plugins_14}, + {.app = food_minigame_app, .name = "Food minigame", .stack_size = 1024, .icon = &A_Games_14}, }; const size_t FLIPPER_SCENE_APPS_COUNT = sizeof(FLIPPER_SCENE_APPS) / sizeof(FlipperApplication); diff --git a/applications/dolphin/games/food.c b/applications/dolphin/games/food.c new file mode 100644 index 00000000..ea35b6d8 --- /dev/null +++ b/applications/dolphin/games/food.c @@ -0,0 +1,321 @@ +#include +#include +#include "dolphin/dolphin_state.h" + +#define MAX_TRIES 3 +#define DISHES_TOTAL 3 +#define LID_POS_MAX 20 +#define TRY_TIMEOUT 10 + +typedef enum { + EventTypeTick, + EventTypeKey, + EventTypeDeed, +} EventType; + +typedef struct { + union { + InputEvent input; + } value; + EventType type; +} AppEvent; + +typedef enum { + PlayerChoiceEvent, + OpenLootEvent, + WinEvent, + LooseEvent, + FinishedEvent, + ExitGameEvent, + GameEventTotal, +} GameEventType; + +typedef enum { + LootSkeleton, + LootFish, + LootShit, + LootTotalNum, +} LootIdEnum; + +typedef struct { + GameEventType current_event; + osMessageQueueId_t event_queue; + LootIdEnum loot_list[DISHES_TOTAL]; + + uint8_t cursor_pos; + uint8_t lid_pos; + uint8_t timeout; + uint8_t try; + + bool selected; + bool deed; + +} GameState; + +typedef struct { + const Icon* f; + const Icon* b; +} LootGfx; + +static const Icon* letters[DISHES_TOTAL] = {&I_letterA_10x10, &I_letterB_10x10, &I_letterC_10x10}; + +static const LootGfx loot[LootTotalNum] = { + [LootSkeleton] = + { + .f = &I_skeleton_25x17, + .b = &I_blackskeleton_25x17, + }, + [LootFish] = + { + .f = &I_fish_25x17, + .b = &I_blackfish_25x17, + }, + [LootShit] = + { + .f = &I_shit_25x17, + .b = &I_blackshit_25x17, + }, +}; + +static void input_callback(InputEvent* input_event, void* ctx) { + osMessageQueueId_t event_queue = ctx; + AppEvent event; + event.type = EventTypeKey; + event.value.input = *input_event; + osMessageQueuePut(event_queue, &event, 0, osWaitForever); +} + +static void draw_dish(Canvas* canvas, GameState* state, uint8_t x, uint8_t y, uint8_t id) { + bool active = state->cursor_pos == id; + bool opened = state->current_event == OpenLootEvent && active; + + canvas_set_bitmap_mode(canvas, true); + canvas_set_color(canvas, ColorBlack); + + if(active) { + canvas_draw_icon(canvas, x, y, &I_active_plate_48x18); + } + + if(opened) { + state->lid_pos = CLAMP(state->lid_pos + 1, LID_POS_MAX, 0); + } + + uint8_t lid_pos = (y - 17) - (opened ? state->lid_pos : 0); + + canvas_draw_icon(canvas, x + 3, y - 6, &I_plate_42x19); + + canvas_set_color(canvas, ColorWhite); + canvas_draw_icon(canvas, x + 11, y - 10, loot[state->loot_list[id]].b); + canvas_set_color(canvas, ColorBlack); + canvas_draw_icon(canvas, x + 11, y - 10, loot[state->loot_list[id]].f); + + canvas_set_color(canvas, ColorWhite); + canvas_draw_icon(canvas, x + 6, lid_pos, &I_blacklid_36x27); + canvas_set_color(canvas, ColorBlack); + canvas_draw_icon(canvas, x + 6, lid_pos, &I_lid_36x27); + canvas_set_bitmap_mode(canvas, false); + + canvas_draw_icon(canvas, x + 19, y + 8, letters[id]); +} + +static void draw_dishes_scene(Canvas* canvas, GameState* state) { + uint8_t tries_left = MAX_TRIES - state->try; + for(size_t i = 0; i < MAX_TRIES; i++) { + if(i < tries_left) { + canvas_draw_disc(canvas, 5 + i * 8, 5, 2); + } else { + canvas_draw_circle(canvas, 5 + i * 8, 5, 2); + } + } + + for(size_t i = 0; i < DISHES_TOTAL; i++) { + draw_dish(canvas, state, i * 40, i % 2 ? 26 : 44, i); + } +} + +static void render_callback(Canvas* canvas, void* ctx) { + GameState* state = (GameState*)acquire_mutex((ValueMutex*)ctx, 25); + canvas_clear(canvas); + + switch(state->current_event) { + case WinEvent: + canvas_draw_str(canvas, 30, 30, "Dolphin_happy.png"); + break; + case LooseEvent: + canvas_draw_str_aligned(canvas, 64, 30, AlignCenter, AlignCenter, "Try again!"); + break; + case ExitGameEvent: + break; + case FinishedEvent: + break; + default: + draw_dishes_scene(canvas, state); + break; + } + + release_mutex((ValueMutex*)ctx, state); +} +static void reset_lid_pos(GameState* state) { + state->selected = false; + state->lid_pos = 0; +} + +void dolphin_food_deed(GameState* state) { + furi_assert(state); + AppEvent event; + event.type = EventTypeDeed; + furi_check(osMessageQueuePut(state->event_queue, &event, 0, osWaitForever) == osOK); +} + +static void reset_loot_array(GameState* state) { + for(size_t i = 0; i < LootTotalNum; i++) { + state->loot_list[i] = i; + } + + for(size_t i = 0; i < LootTotalNum; i++) { + int temp = state->loot_list[i]; + int r_idx = rand() % LootTotalNum; + + state->loot_list[i] = state->loot_list[r_idx]; + state->loot_list[r_idx] = temp; + } +} + +static bool selected_is_food(GameState* state) { + return state->loot_list[state->cursor_pos] == LootFish; +} + +static bool tries_exceed(GameState* state) { + return state->try == MAX_TRIES; +} + +static bool timeout_exceed(GameState* state) { + return state->timeout == TRY_TIMEOUT; +} + +static void gamestate_update(GameState* state, DolphinState* dolphin_state) { + switch(state->current_event) { + case PlayerChoiceEvent: + if(state->selected) { + state->current_event = OpenLootEvent; + } + break; + case OpenLootEvent: + state->timeout = CLAMP(state->timeout + 1, TRY_TIMEOUT, 0); + if(timeout_exceed(state)) { + state->timeout = 0; + state->current_event = selected_is_food(state) ? WinEvent : LooseEvent; + state->deed = selected_is_food(state); + } + break; + case LooseEvent: + state->timeout = CLAMP(state->timeout + 1, TRY_TIMEOUT, 0); + if(timeout_exceed(state)) { + state->timeout = 0; + state->current_event = FinishedEvent; + } + break; + case WinEvent: + if(state->deed) { + dolphin_food_deed(state); + } + break; + case FinishedEvent: + reset_lid_pos(state); + reset_loot_array(state); + + state->try++; + state->current_event = tries_exceed(state) ? ExitGameEvent : PlayerChoiceEvent; + break; + + default: + break; + } +} + +static void food_minigame_controls(GameState* state, AppEvent* event) { + furi_assert(state); + furi_assert(event); + + if(event->value.input.key == InputKeyRight) { + if(state->current_event == PlayerChoiceEvent) { + state->cursor_pos = CLAMP(state->cursor_pos + 1, DISHES_TOTAL - 1, 0); + } + } else if(event->value.input.key == InputKeyLeft) { + if(state->current_event == PlayerChoiceEvent) { + state->cursor_pos = CLAMP(state->cursor_pos - 1, DISHES_TOTAL - 1, 0); + } + } else if(event->value.input.key == InputKeyOk) { + switch(state->current_event) { + case PlayerChoiceEvent: + state->selected = true; + break; + case WinEvent: + state->current_event = FinishedEvent; + break; + default: + break; + } + } +} + +int32_t food_minigame_app(void* p) { + GameState* state = furi_alloc(sizeof(GameState)); + DolphinState* dolphin_state = dolphin_state_alloc(); + dolphin_state_load(dolphin_state); + + ValueMutex state_mutex; + + state->event_queue = osMessageQueueNew(2, sizeof(AppEvent), NULL); + + furi_check(state->event_queue); + + if(!init_mutex(&state_mutex, state, sizeof(GameState*))) { + printf("[Food minigame] cannot create mutex\r\n"); + return 0; + } + + ViewPort* view_port = view_port_alloc(); + + view_port_draw_callback_set(view_port, render_callback, &state_mutex); + view_port_input_callback_set(view_port, input_callback, state->event_queue); + + Gui* gui = furi_record_open("gui"); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + reset_loot_array(state); + + AppEvent event; + while(1) { + osStatus_t event_status = osMessageQueueGet(state->event_queue, &event, NULL, 100); + if(event_status == osOK) { + if(event.type == EventTypeKey && event.value.input.type == InputTypeShort) { + food_minigame_controls(state, &event); + + if(event.value.input.key == InputKeyBack) { + break; + } + } else if(event.type == EventTypeDeed) { + dolphin_state_on_deed(dolphin_state, DolphinDeedIButtonRead); + dolphin_state_save(dolphin_state); + state->deed = false; + } + } + + if(state->current_event == ExitGameEvent) { + break; + } + gamestate_update(state, dolphin_state); + view_port_update(view_port); + } + + gui_remove_view_port(gui, view_port); + view_port_free(view_port); + furi_record_close("gui"); + delete_mutex(&state_mutex); + osMessageQueueDelete(state->event_queue); + dolphin_state_free(dolphin_state); + free(state); + + return 0; +} diff --git a/applications/dolphin/scenes/assets/items.c b/applications/dolphin/scenes/assets/items.c index d975551b..539c01e1 100644 --- a/applications/dolphin/scenes/assets/items.c +++ b/applications/dolphin/scenes/assets/items.c @@ -228,6 +228,6 @@ void console_callback(Canvas* canvas, void* s) { furi_assert(s); SceneState* state = s; if(state->use_pending) { - dolphin_scene_start_app(state, &FLIPPER_SCENE_APPS[1]); + dolphin_scene_start_app(state, &FLIPPER_SCENE_APPS[0]); } } \ No newline at end of file diff --git a/assets/compiled/assets_icons.c b/assets/compiled/assets_icons.c index 83b2dae0..62927365 100644 --- a/assets/compiled/assets_icons.c +++ b/assets/compiled/assets_icons.c @@ -143,6 +143,45 @@ const uint8_t *_I_FX_Bang_32x6[] = {_I_FX_Bang_32x6_0}; const uint8_t _I_DolphinFirstStart3_57x48_0[] = {0x00,0x00,0x00,0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0xF8,0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x04,0xBC,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0xC0,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x02,0x00,0x38,0x40,0x00,0x00,0x02,0x00,0x04,0x00,0x3E,0x40,0x00,0x00,0xF4,0x03,0x08,0x80,0x07,0x80,0x00,0x00,0x5C,0x0D,0x10,0xE0,0x01,0x80,0x00,0x00,0xA8,0x3A,0x20,0xE0,0x00,0x00,0x01,0x00,0x58,0x55,0x00,0xC0,0x01,0x00,0x01,0x00,0xB0,0xAA,0x00,0x80,0x07,0x00,0x01,0x00,0x60,0x55,0x01,0x00,0x1E,0x00,0x01,0x0E,0xC0,0xAA,0x02,0xE0,0x5C,0x00,0x01,0x11,0x80,0x55,0x05,0x00,0xA9,0x00,0x01,0x21,0x00,0xAB,0x0A,0x00,0x56,0x07,0x01,0x41,0x00,0x56,0x15,0x00,0xEC,0x08,0x01,0x81,0x00,0xBF,0x2A,0x00,0x34,0x08,0x01,0x01,0xF1,0xC0,0x57,0x00,0x0C,0x08,0x01,0x02,0x0A,0x00,0xBE,0x00,0x04,0x08,0x01,0x02,0x06,0x00,0x78,0x83,0x02,0x04,0x01,0x02,0x0C,0x00,0xF0,0x7F,0x01,0x04,0x01,0x02,0xF4,0x01,0xFE,0x81,0x00,0x04,0x01,0x04,0x08,0xFF,0x6B,0x40,0x00,0x02,0x01,0x04,0x88,0x55,0x1D,0x40,0x00,0x02,0x01,0x04,0x50,0xAA,0x06,0x20,0x00,0x02,0x01,0x04,0x30,0xD4,0x01,0x20,0x00,0x01,0x01,0x04,0x10,0x68,0x00,0x10,0x00,0x01,0x01,0x04,0x18,0x18,0x00,0x10,0x00,0x01,0x01,0x08,0x18,0x06,0x80,0x10,0x00,0x01,0x01,0x08,0xE8,0x01,0x60,0x08,0x80,0x00,0x01,0x08,0x08,0x00,0x18,0x08,0x80,0x00,0x00,0x08,0x10,0x00,0x06,0x08,0x80,0x00,0x00,0x08,0x60,0xE0,0x01,0x08,0x80,0x00,0x00,0x08,0x80,0x1F,0x00,0x08,0x80,0x00,0x00,0x08,0x80,0x04,0x00,0x04,0x00,0x01,0x00,0x08,0x80,0x04,0x00,0x04,0x00,0x01,0x00,0x10,0x00,0x03,0x00,0x04,0x00,0x01,0x00,0x10,0x00,0x03,0x00,0x04,0x00,0x01,0x00,0x10,0x00,0x01,0x00,0x04,0x00,0x02,0x00,0x10,0x00,0x01,0x00,0x04,0x00,0x02,0x00,0x10,0x80,0x00,0x00,0x04,0x00,0x02,0x00,0x10,0x80,0x00,0x00,0x04,0x00,0x06,0x00,}; const uint8_t *_I_DolphinFirstStart3_57x48[] = {_I_DolphinFirstStart3_57x48_0}; +const uint8_t _I_blackfish_25x17_0[] = {0x00,0x0E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x80,0x01,0x80,0xFF,0xE0,0x01,0xE0,0xFF,0xF0,0x01,0xF0,0xFF,0xF3,0x01,0xF8,0xFF,0xFF,0x00,0xFC,0xFF,0xFF,0x00,0xFF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x01,0xFE,0xFF,0xFB,0x01,0xF8,0xFF,0xF1,0x01,0xE0,0x7F,0xC0,0x01,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,}; +const uint8_t *_I_blackfish_25x17[] = {_I_blackfish_25x17_0}; + +const uint8_t _I_blacklid_36x27_0[] = {0x00,0x80,0x1F,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0xF8,0xFF,0x01,0x00,0x00,0xFE,0xFF,0x07,0x00,0x80,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0x00,0xF8,0xFF,0xFF,0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0x03,0xFC,0xFF,0xFF,0xFF,0x03,0xFE,0xFF,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFE,0xFF,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0x07,0xFC,0xFF,0xFF,0xFF,0x03,0xF0,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0xFC,0xFF,0x03,0x00,}; +const uint8_t *_I_blacklid_36x27[] = {_I_blacklid_36x27_0}; + +const uint8_t _I_skeleton_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x10,0x25,0xC0,0x00,0x08,0x49,0xA1,0x00,0x68,0x4A,0x92,0x00,0x64,0x4A,0x52,0x00,0x64,0xFE,0x5F,0x00,0x08,0x4A,0x92,0x00,0x08,0x4A,0xA1,0x00,0x10,0x29,0xC0,0x00,0xE0,0x04,0x00,0x00,}; +const uint8_t *_I_skeleton_25x17[] = {_I_skeleton_25x17_0}; + +const uint8_t _I_letterB_10x10_0[] = {0xFF,0x03,0x01,0x02,0x39,0x02,0x49,0x02,0x39,0x02,0x49,0x02,0x49,0x02,0x39,0x02,0x01,0x02,0xFF,0x03,}; +const uint8_t *_I_letterB_10x10[] = {_I_letterB_10x10_0}; + +const uint8_t _I_shit_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x0F,0x01,0x00,0x80,0x00,0x07,0x00,0x80,0xC0,0x08,0x00,0xC0,0x03,0x08,0x00,0x20,0x06,0x1E,0x00,0x20,0x30,0x13,0x00,0x20,0x00,0x10,0x00,0xC0,0x00,0x18,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; +const uint8_t *_I_shit_25x17[] = {_I_shit_25x17_0}; + +const uint8_t _I_letterC_10x10_0[] = {0xFF,0x03,0x01,0x02,0x31,0x02,0x49,0x02,0x09,0x02,0x09,0x02,0x49,0x02,0x31,0x02,0x01,0x02,0xFF,0x03,}; +const uint8_t *_I_letterC_10x10[] = {_I_letterC_10x10_0}; + +const uint8_t _I_active_plate_48x18_0[] = {0x08,0x00,0x00,0x00,0x00,0x10,0x0C,0x00,0x00,0x00,0x00,0x30,0x06,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x00,0x60,0x07,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0x00,0x00,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0xF8,0x3E,0x00,0x00,0x00,0x00,0x7C,0x7E,0x00,0x00,0x00,0x00,0x7E,0xFC,0x01,0x00,0x00,0x80,0x3F,0xF8,0x0F,0x00,0x00,0xF0,0x1F,0xF0,0x7F,0x00,0x00,0xFE,0x0F,0xE0,0xFF,0xFF,0xFF,0xFF,0x07,0x80,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0xFF,0xFF,0x7F,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,}; +const uint8_t *_I_active_plate_48x18[] = {_I_active_plate_48x18_0}; + +const uint8_t _I_fish_25x17_0[] = {0x00,0x0E,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x21,0x80,0x01,0x80,0xCD,0x60,0x01,0x60,0xC0,0x10,0x01,0x10,0x00,0x13,0x01,0x08,0x00,0x8C,0x00,0xC4,0x00,0x88,0x00,0xE3,0x00,0x40,0x00,0xE1,0x00,0x80,0x00,0x03,0x00,0x80,0x00,0x01,0x00,0x0C,0x01,0x0E,0x00,0x1B,0x01,0x38,0xC0,0x71,0x01,0xE0,0x7F,0xC0,0x01,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,}; +const uint8_t *_I_fish_25x17[] = {_I_fish_25x17_0}; + +const uint8_t _I_blackshit_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xF0,0x01,0x00,0x00,0xF8,0x01,0x00,0x00,0xFF,0x01,0x00,0x80,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0xC0,0xFF,0x0F,0x00,0xE0,0xFF,0x1F,0x00,0xE0,0xFF,0x1F,0x00,0xE0,0xFF,0x1F,0x00,0xC0,0xFF,0x1F,0x00,0x80,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; +const uint8_t *_I_blackshit_25x17[] = {_I_blackshit_25x17_0}; + +const uint8_t _I_lid_36x27_0[] = {0x00,0x80,0x1F,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x80,0x1F,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xC0,0x3F,0x00,0x00,0x00,0x38,0xCF,0x01,0x00,0x00,0x06,0x00,0x06,0x00,0x80,0x01,0x00,0x18,0x00,0x40,0x00,0x80,0x21,0x00,0x20,0x00,0x00,0x46,0x00,0x10,0x00,0x00,0x8C,0x00,0x08,0x00,0x00,0x18,0x01,0x04,0x00,0x00,0x38,0x02,0x04,0x00,0x00,0x70,0x02,0x02,0x00,0x00,0x70,0x04,0x02,0x00,0x00,0xE0,0x04,0x01,0x00,0x00,0xE0,0x08,0x01,0x00,0x00,0xC0,0x09,0x01,0x00,0x00,0xC0,0x09,0x01,0x00,0x00,0xC0,0x09,0x02,0x00,0x00,0xC0,0x07,0x02,0x00,0x00,0xC0,0x07,0x0C,0x00,0x00,0xE0,0x03,0x30,0x00,0x00,0xF0,0x00,0xC0,0x03,0x00,0x3C,0x00,0x00,0xFC,0xFF,0x03,0x00,}; +const uint8_t *_I_lid_36x27[] = {_I_lid_36x27_0}; + +const uint8_t _I_blackskeleton_25x17_0[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xF0,0x25,0xC0,0x00,0xF8,0x49,0xE1,0x00,0xF8,0x4B,0xF2,0x00,0xFC,0x4B,0x72,0x00,0xFC,0xFF,0x7F,0x00,0xF8,0x4B,0xF2,0x00,0xF8,0x4B,0xE1,0x00,0xF0,0x29,0xC0,0x00,0xE0,0x04,0x00,0x00,}; +const uint8_t *_I_blackskeleton_25x17[] = {_I_blackskeleton_25x17_0}; + +const uint8_t _I_letterA_10x10_0[] = {0xFF,0x03,0x01,0x02,0x31,0x02,0x49,0x02,0x79,0x02,0x49,0x02,0x49,0x02,0x49,0x02,0x01,0x02,0xFF,0x03,}; +const uint8_t *_I_letterA_10x10[] = {_I_letterA_10x10_0}; + +const uint8_t _I_plate_42x19_0[] = {0x00,0xF0,0xFF,0x3F,0x00,0x00,0x00,0x0E,0x00,0xC0,0x01,0x00,0xC0,0x01,0x00,0x00,0x0E,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x08,0x00,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x80,0x00,0x08,0x00,0x00,0x00,0x40,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0xC0,0x01,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0xC0,0x01,0x00,0x00,0xF0,0xFF,0x3F,0x00,0x00,}; +const uint8_t *_I_plate_42x19[] = {_I_plate_42x19_0}; + const uint8_t _I_PassportBottom_128x17_0[] = {0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x9A,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x9A,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x95,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x9A,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0xF9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0D,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x05,0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x05,0xFA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x09,0x79,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xD5,0x80,0x55,0xD5,0x00,0xF3,0xCC,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x6A,0x00,0xAB,0x6A,0x00,0x06,0x86,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xFE,0x3F,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; const uint8_t *_I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0}; @@ -821,6 +860,19 @@ const Icon I_Flipper_young_80x60 = {.width=80,.height=60,.frame_count=1,.frame_r const Icon I_BigBurger_24x24 = {.width=24,.height=24,.frame_count=1,.frame_rate=0,.frames=_I_BigBurger_24x24}; const Icon I_FX_Bang_32x6 = {.width=32,.height=6,.frame_count=1,.frame_rate=0,.frames=_I_FX_Bang_32x6}; const Icon I_DolphinFirstStart3_57x48 = {.width=57,.height=48,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart3_57x48}; +const Icon I_blackfish_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_blackfish_25x17}; +const Icon I_blacklid_36x27 = {.width=36,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_blacklid_36x27}; +const Icon I_skeleton_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_skeleton_25x17}; +const Icon I_letterB_10x10 = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_letterB_10x10}; +const Icon I_shit_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_shit_25x17}; +const Icon I_letterC_10x10 = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_letterC_10x10}; +const Icon I_active_plate_48x18 = {.width=48,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_active_plate_48x18}; +const Icon I_fish_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_fish_25x17}; +const Icon I_blackshit_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_blackshit_25x17}; +const Icon I_lid_36x27 = {.width=36,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_lid_36x27}; +const Icon I_blackskeleton_25x17 = {.width=25,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_blackskeleton_25x17}; +const Icon I_letterA_10x10 = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_letterA_10x10}; +const Icon I_plate_42x19 = {.width=42,.height=19,.frame_count=1,.frame_rate=0,.frames=_I_plate_42x19}; const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17}; const Icon I_DoorLeft_8x56 = {.width=8,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_8x56}; const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56}; diff --git a/assets/compiled/assets_icons.h b/assets/compiled/assets_icons.h index 21981ebd..cb7889ec 100644 --- a/assets/compiled/assets_icons.h +++ b/assets/compiled/assets_icons.h @@ -39,6 +39,19 @@ extern const Icon I_Flipper_young_80x60; extern const Icon I_BigBurger_24x24; extern const Icon I_FX_Bang_32x6; extern const Icon I_DolphinFirstStart3_57x48; +extern const Icon I_blackfish_25x17; +extern const Icon I_blacklid_36x27; +extern const Icon I_skeleton_25x17; +extern const Icon I_letterB_10x10; +extern const Icon I_shit_25x17; +extern const Icon I_letterC_10x10; +extern const Icon I_active_plate_48x18; +extern const Icon I_fish_25x17; +extern const Icon I_blackshit_25x17; +extern const Icon I_lid_36x27; +extern const Icon I_blackskeleton_25x17; +extern const Icon I_letterA_10x10; +extern const Icon I_plate_42x19; extern const Icon I_PassportBottom_128x17; extern const Icon I_DoorLeft_8x56; extern const Icon I_DoorLocked_10x56; diff --git a/assets/icons/FoodMinigame/active_plate_48x18.png b/assets/icons/FoodMinigame/active_plate_48x18.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e2b84c4dd981bdc2dbfb2d101dc308f3134e08 GIT binary patch literal 1057 zcmaJ=Pe>F|93E6EBqa<2J3U6hqIPC>c4L{rQFdqiv(}icTN-q5cIK^4>&%;Gp6#v@ zlmsDksqj(|7+nN0S+WiVf>2aQn1=$ZgAiRTf(Rl#)EjlRL)*Zc_lNKMe&6r+es8R+ zv#qM~U?oLSRq=KuL1vDOnmuLYf3xD%S2ES&mR{VA(m1QRkct{81wq`>`e6cUM*hM} z*ho?3^=7gc_o^pE9a)U#W0;)f5H>|MHs>5o&p-@Pu-~*L`rDH^8kmMe_Z(9>)sf+V z**@&T?%~d)KAh17gKlmDjX9ABSP*L&J!A~1%Q()3j7DBw9h$Z}ye7!Gip7!t&A7;Jqs3FjJVF`=|>1tU9&9>CZU zSvH%^GT9J=+S65U}pr^a0gH2=uUr|e;AuQ3v>Shj> zvn^|TTXiB8V{@9r1{u!JsR&fn|3fWn8|~o)-0}NQVK13?Ae(?58gg}VbLl!ilq1S6 z)G%_B2n`m?*foGK@&=Ftc%BJ^Lp`Q#psaUzgP^Kn-1e|$>oBfJG?8FT(-0$(5GQlI z+!_*uV6Y_?jd8LNi^TYFR91q#QsgQ~AF`m0i(F%etCZyW&0sksvI1T6A~afEWPy#G zMYFV*Xi2>-u2I@ctR$BuW?27b|GMeo5osTPx!t&Av)%g8CjIV`#$N9DX_H5BE3QP7 zx#flNmFml2&sFL9`dnf5{KCw{!?IuS_0yA`6|-;M3aWN@+YyyNosg;arovL)Qp2wC zXJwV4kNl6xmNm5OJNLW8zBaLPkGq{ITq>Xc68g0GsCs>6ZA^}TSbMiP zl{KcV8zYnJa^cOH(NlM?q-OT6=087v@FG18Mk3$m^Q(RP`zUn1=fEAOs>Xk`@s>_y II@UM(2T(3wNdN!< literal 0 HcmV?d00001 diff --git a/assets/icons/FoodMinigame/blackfish_25x17.png b/assets/icons/FoodMinigame/blackfish_25x17.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cc252292d6fb4b512d330b5fa5b8ce9b126cf6 GIT binary patch literal 1025 zcmaJ=PiWIn7!MnRG1$qK;E^47*Jc`^0%Wq(m zqM8pH*&NO(XGIN}jOyhuWz!~Tii-A@ZB-kC802BWuq681%VioEx zoKNF84nzb-SM#ct&z}H1$NO0>$ohjmjuQid7z~2yLz8ljJ}PG9WVIOCNpuloTV&Z% zsl=253~~yrUl0VA<5`~fkqnGug3wVrb9!+40CQ`S1Fzq_6 zsc_lMXULrDxG- ztR>ixuZqPvP2B)P4=%z*FwZT-m-37vZ-4iTEy=TG4@dM=^=6{+?3pxEq{79 z*w^tIv_99jw)nSS&flCpwlXW-PG35+Yw=tc^{8e2=ltW-;U;$DB7V_+V9&yn bS1o&~>tDnBKP+@4yi1u%49L%7BUk>3`tyC1HSQQLWe1MzGW}gXNB~3Q%s$1)JrS)Q)O{Q&VlZnaH&Gz7- zNKr)bRYgS)B8UhcJXmZ6t2aRqMDTS~L25w}LD7qocDMCV8<@<@&-eZR_dn)jTWfP& z?fP1ZqUtg&N{;MX$l6e|l>D!?j*pS80jE20JLn(e!?Z=>qIE?G*EM;xR*;MvCc(WkJ@FVV~JD zF3bYXvVz2B&>qggc^M0$y?n`mTn>6@(A7ypdNxB64{Np#D_nD) z3l`;yvI{kg+&n@9mG-suA&k5}FI_j*~}mF{4O%|K0SZy(=f_8fC?mKV5IxedFKcjjJxi;q51-@5`k< zJ6_*E+2YBm*EQzRhfC@cOXJVijjC;3cVET^*N%+DK9$aV$^ZKOv^iZJ`H?vLX84dY zb@+VfX2Y#37q^}p8NS*)1!JSHPHeh<`o^6P%dVfE9{c&WcjCZ{>W%`36Kp_iH7sn8e>&ZX<|F360{QthfBlV6Sj7oM_m^;}OnixI) zBu`)${KLyr?{I{ltt{mce+R>9ryeFDhVtJUuVi%ld4Oi9mbgZgq$HN4S|t~y0x1R~ z10zFS0}EXP(-1>LD-%mALqlx?11kdqz9TDvu0+z1o1c=IR*9*>zzCwD={9#iPy>Uf LtDnm{r-UW|9PCnK literal 0 HcmV?d00001 diff --git a/assets/icons/FoodMinigame/blackskeleton_25x17.png b/assets/icons/FoodMinigame/blackskeleton_25x17.png new file mode 100644 index 0000000000000000000000000000000000000000..c55ee79e7c75c7b7bb95ae8b126c9ad40885182d GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoT2qYL74q7b+k}Tbk+y+>m4QK)%oA=D4Y~O#nQ4`n8VpS!8otTp4 zP>2x}1?@u`gb;=#6!;_*BuEjJ^k6Sa7zGjaP+-<$FLg)VwTHHWnYs6HzVCeJp6^~u zCXQ6Q8{Gs!RL6S66#gH;Z>?(={?5KFo^k>xnniuE9~C4M5FrKT02$My0gwWcGID+i zbP&YuW;LBf+4ylmh8it7Ikc@A7)=lzUA7^~g8-2^Frex|>id&Lid2;#l{p+|<3F9MAI%>t(!N56ZHRc<=`+1QdsI% z51LV?)vfJw!Y9VqlEH8^>-1DgjK}|O9wm#6Y-%V`nH?_rOd?_Yk zVkm8|&7?zn$5>b0v)_w1t~ZQdUYVYntUkKuL~2E@6_u)DU4$q`p8H%M)b_EdPY-^$ zUVLp``slrPwsEkf_e||%o4S8va^g$>&7bRI$9|oB{dsj`=JvwB zLtlKj{BA*8z0*6t?$58?9Zg&f+zMWKpFI7v>v5*OA^)vwIx}Byx>=&ied%C#=e}m= N+Qy;@aV~sr{0~wATk`+_ literal 0 HcmV?d00001 diff --git a/assets/icons/FoodMinigame/letterA_10x10.png b/assets/icons/FoodMinigame/letterA_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf79edbbe36a659c2f3f9631572b7f2cc6e2d0c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4IeWS|hDc1EJK-W5g8>ioWkSUXfk`(vs|a2V{MzCi6)qc>)xJ9B)!rMccK>Nye(7sIKf3{= XVt}~N#k2-npm7YIu6{1-oD!Mf4d3m}xhDc29oe;>ypupjrUh-dC znypP&nEm&}@cfCR4oP1tDfr9NHvJTf2nTQJ2;g%@|$9=}>l>oNl2@PE5{hI(^Wg zh?fb1Hx#cp9~AXL#oML~oS+B_DuRdzq7N!eLHFk6WUkW(YvANu_`dJ|{{Q@ES7XD9 zit;(-6h&1e>*W-gtH_vJHlF;CHQc&Rrr9{&jGIsv=Yb8Wn1(WtP8y&MrXbJ?8y~<3 zMNO#E)6KY9StY5+V1b8WUBe=5ii*^_7Ep5#(;3*Nn^9)y_Fab7wJ5VDr0|MW2ix`f zE*my=HKf(9oGNNe?J_#zN<_eb7|^cKVLFlyQoU zFw6T?p6BVX$Z8-1)J$dxE%1V$uoULW0l$;n1Ms`uA9b-%4 zxO_g(<^wFU+c>`{iX1O+g5VBFLal9A${r-#Hl8 zn5^lH)`?V%bAiSAS>DU32vn5+Lk(jL?cfyr`mgX-5_<2yBpEv_>~Ily|B}2#O*lO$P&0g-JQe5D8Y-H7OL9gTm54 zI1vyzkmKu#rKJ zy@X2YjdHcpUY3^Ra>NYh-RxgCT|6S~<1NP;mu$vbADX1!ZPM5WudW+M9>ri% zj-}m~eTP~m4bo-uV(_zN`1SUCv*uMFsorw!tS$6)eC)3Uxr@FN&o(Oiho3wt2!(Rr z=}(tWu|1Vn=QkZWc68uH&FZ&%*UtRfm+If}@Z865n|oWkXFPus84Oia&3ZW48I#_r zlNT(R`sr}*wjJ@^pSRab6_4EaL-%iHTcU$>dw5zaRSr&ujH;Do P-ZM|e8{|vNTf2V&`F(jU literal 0 HcmV?d00001 diff --git a/assets/icons/FoodMinigame/plate_42x19.png b/assets/icons/FoodMinigame/plate_42x19.png new file mode 100644 index 0000000000000000000000000000000000000000..3de05e1bb14972a29dbb43d0f8c2939ecbd02248 GIT binary patch literal 1049 zcmaJ=O-$2J9BxvJctFG2t}Bc+8)Q&mGj@_O174J_eQXW1ue5KjZ~;k- z7~^M%i6=w6;Kc(*F2;|miFz``NHj4TxcGI@Xhfo~V;dfvO=P3B~)2WIuy zlnn=`5-D|RObuytS0@O&A`vhkR)A}an~vy4=z^|D*4{Bog8~GPMd&S4!}0*=K{ffI`lq zUfD}qMZF?dtL&w{B9|p*Snp>4y6MspX&-M{Zd|e{w>~sUzuTm-&kaUmgn~>`Wa9qoqhXz`o>gxd3=61_vZCodQbfLYU|wMgWAhW?qbuzy?6DAkEp9|zUkLh z@!Of7vmdN4w`zAyH13mMI+lN9ZDw^PcDrplV?Nw8!z;?f+Oe;-*G}D}#&Vzfqm3Ip zeil7>;L>R4^Y>RSuAf*~T5f6hzWKQS2U@Qip~8l~f9?oUy~i5wO-OgTM`r&3V}n{6 literal 0 HcmV?d00001 diff --git a/assets/icons/FoodMinigame/shit_25x17.png b/assets/icons/FoodMinigame/shit_25x17.png new file mode 100644 index 0000000000000000000000000000000000000000..2323a8181582ee4bb02ac8b8ecc4d7154360fb57 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoT2qYL74q7b+k}Ts)7Qg=R|U1RdP`(kYX@0Ff!CNu+TLy4KXydGO@5SHPbdQure@M@cL5~iiX_$l+3hB YObsSb4YD#`5kL(Lp00i_>zopr0PhrDg8%>k literal 0 HcmV?d00001 diff --git a/assets/icons/FoodMinigame/skeleton_25x17.png b/assets/icons/FoodMinigame/skeleton_25x17.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcf45bf7627adbdb0fefb1c142182975877ab6f GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoT2qYL74q7b+k}TmIRp{E+**yzyaeUMTb7(_3## zN#w1&%cUX}(U_$0?)O%Q&i6MRRPEpW&u3uJXEI?=NoZ;Unxb0b8c~vxSdwa$T$Bo= z7>o>z40R1GbPY^H42`S|jjap}v<(b^U4 literal 0 HcmV?d00001