From 8559193d21bc481b9549575d617b781cc2190944 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 20 Nov 2019 14:30:34 +0100 Subject: [PATCH] The ui. --- game/ui/actionbars/ActionBar.gd | 48 ++ game/ui/actionbars/ActionBar.tscn | 30 ++ game/ui/actionbars/ActionBarEntry.gd | 276 +++++++++++ game/ui/actionbars/ActionBarEntry.tscn | 93 ++++ game/ui/actionbars/Actionbars.gd | 52 +++ game/ui/actionbars/EditorKeybindSetup.gd | 37 ++ game/ui/auraframe/AuraEntry.gd | 79 ++++ game/ui/auraframe/AuraEntry.tscn | 94 ++++ game/ui/auraframe/AuraFrame.gd | 59 +++ game/ui/auraframe/AuraFrame.tscn | 41 ++ game/ui/bags/Bag.tscn | 323 +++++++++++++ game/ui/bags/BagEntry.gd | 206 +++++++++ game/ui/bags/BagEntry.tscn | 80 ++++ game/ui/bags/BagFrame.gd | 13 + game/ui/bags/BagFrame.tscn | 51 +++ game/ui/bags/EquipmentSlot.gd | 87 ++++ game/ui/bags/EquipmentSlot.tscn | 37 ++ game/ui/bags/InventoryGUI.gd | 109 +++++ game/ui/bags/ItemPupop.gd | 19 + game/ui/bags/weapon_set_button_group.tres | 3 + game/ui/buttons/Buttons.gd | 47 ++ game/ui/castbar/Castbar.gd | 74 +++ game/ui/castbar/Castbar.tscn | 22 + game/ui/crafting/ItemEntry.gd | 31 ++ game/ui/crafting/ItemEntry.tscn | 45 ++ game/ui/crafting/RecipeSelector.gd | 17 + game/ui/crafting/RecipeSelector.tscn | 12 + game/ui/debug/DebugInfo.gd | 61 +++ game/ui/debug/DebugInfo.tscn | 18 + game/ui/debug/SpawnPointSimpleUI.tscn | 101 +++++ game/ui/debug/debuginfo_font.tres | 7 + game/ui/errorframe/ErrorFrame.tscn | 5 + game/ui/ingame_menu/ExitButton.gd | 12 + game/ui/ingame_menu/IngameMenu.tscn | 83 ++++ game/ui/keybinds/KeybindCategory.gd | 9 + game/ui/keybinds/KeybindCategory.tscn | 29 ++ game/ui/keybinds/KeybindEntry.gd | 23 + game/ui/keybinds/KeybindEntry.tscn | 34 ++ game/ui/keybinds/Keybinds.gd | 113 +++++ game/ui/keybinds/Keybinds.tscn | 73 +++ game/ui/login/Login.tscn | 88 ++++ game/ui/loot_window/LootEntry.gd | 33 ++ game/ui/loot_window/LootEntry.tscn | 61 +++ game/ui/loot_window/LootWindow.gd | 66 +++ game/ui/loot_window/LootWindow.tscn | 50 ++ game/ui/map/Map.tscn | 47 ++ game/ui/minimap/MiniMap.tscn | 11 + game/ui/nameplates/NamePlate.tscn | 68 +++ .../ui/nameplates/name_plate_dynamicfont.tres | 7 + game/ui/nameplates/name_plate_theme.tres | 36 ++ game/ui/nameplates/texture_progress_bg.tres | 7 + game/ui/nameplates/texture_progress_fg.tres | 7 + game/ui/numbers/Number.gd | 71 +++ game/ui/numbers/Number.tscn | 92 ++++ game/ui/numbers/number_font.tres | 7 + game/ui/options/OptionCheckBox.gd | 17 + game/ui/options/OptionRow.gd | 9 + game/ui/options/Options.tscn | 128 ++++++ game/ui/options/Threads.gd | 19 + game/ui/player_ui/RemoveProfile.gd | 21 + game/ui/player_ui/player_ui.gd | 15 + game/ui/player_ui/player_ui.tscn | 429 ++++++++++++++++++ game/ui/register/Register.tscn | 114 +++++ game/ui/spellbook/SpellEntryPopup.gd | 27 ++ game/ui/starmap/StarMap.tscn | 72 +++ game/ui/talents/Spec.gd | 35 ++ game/ui/talents/Spec.tscn | 22 + game/ui/talents/TalentEntry.gd | 109 +++++ game/ui/talents/TalentEntry.tscn | 110 +++++ game/ui/talents/TalentRow.gd | 9 + game/ui/talents/TalentRow.tscn | 44 ++ game/ui/talents/talent_switcher_button.gd | 16 + game/ui/talents/talent_switcher_button.tscn | 14 + game/ui/theme/GameUI.png | Bin 0 -> 16423 bytes game/ui/theme/GameUI.png.import | 34 ++ game/ui/theme/actionbar_dynamicfont.tres | 7 + game/ui/theme/bag_icon.tres | 7 + game/ui/theme/button_bg_atlas.tres | 7 + game/ui/theme/button_bg_stylebox.tres | 14 + .../ui/theme/button_bg_stylebox_disabled.tres | 14 + game/ui/theme/button_bg_stylebox_focus.tres | 14 + game/ui/theme/button_bg_stylebox_hover.tres | 13 + game/ui/theme/button_bg_stylebox_pressed.tres | 14 + game/ui/theme/checkbox_checked_texture.tres | 7 + game/ui/theme/checkbox_texture.tres | 7 + game/ui/theme/cooldown_progress.png | Bin 0 -> 120 bytes game/ui/theme/cooldown_progress.png.import | 34 ++ game/ui/theme/dropdown_icon.tres | 7 + game/ui/theme/h_scroll_bar_texture.tres | 7 + game/ui/theme/indicator.png | Bin 0 -> 417 bytes game/ui/theme/indicator.png.import | 34 ++ game/ui/theme/lineedit_normal_style.tres | 15 + game/ui/theme/locked_icon.tres | 7 + game/ui/theme/panel_bg.tres | 13 + game/ui/theme/panel_bg_atlas.tres | 7 + game/ui/theme/radio_checked_texture.tres | 7 + game/ui/theme/radio_texture.tres | 7 + game/ui/theme/scrollbar_bg.tres | 14 + game/ui/theme/scrollbar_bg_atlas.tres | 7 + game/ui/theme/scrollbar_bg_focus.tres | 13 + game/ui/theme/scrollbar_grabber.tres | 13 + game/ui/theme/scrollbar_grabber_atlas.tres | 7 + .../ui/theme/scrollbar_grabber_highlight.tres | 13 + game/ui/theme/scrollbar_grabber_pressed.tres | 14 + game/ui/theme/separator_stylebox.tres | 7 + game/ui/theme/separator_texture.tres | 7 + game/ui/theme/spellbook_icon.tres | 7 + game/ui/theme/ui_dynamicfont.tres | 7 + game/ui/theme/ui_dynamicfont_small.tres | 7 + game/ui/theme/ui_theme.tres | 371 +++++++++++++++ game/ui/theme/unlocked_icon.tres | 7 + game/ui/theme/window_bg_atlas.tres | 7 + game/ui/theme/window_bg_bg.tres | 7 + game/ui/touch_pad/TurnPanel.gd | 111 +++++ game/ui/touch_pad/analog.gd | 156 +++++++ game/ui/touch_pad/analog.tscn | 94 ++++ game/ui/touch_pad/analog.xml | 313 +++++++++++++ game/ui/touch_pad/big_circle.png | Bin 0 -> 3779 bytes game/ui/touch_pad/big_circle.png.import | 34 ++ game/ui/touch_pad/small_circle.png | Bin 0 -> 834 bytes game/ui/touch_pad/small_circle.png.import | 34 ++ game/ui/unitframes/TargetUnitframe.gd | 91 ++++ game/ui/unitframes/TargetUnitframe.tscn | 61 +++ game/ui/unitframes/UnitframeBase.gd | 82 ++++ game/ui/unitframes/UnitframeBase.tscn | 60 +++ game/ui/windows/CharacterWindow.tscn | 38 ++ game/ui/windows/CraftItemDescription.gd | 26 ++ game/ui/windows/CraftingWindow.gd | 90 ++++ game/ui/windows/CraftingWindow.tscn | 259 +++++++++++ game/ui/windows/InventoryWindow.tscn | 125 +++++ game/ui/windows/SpellBookWindow.gd | 114 +++++ game/ui/windows/SpellBookWindow.tscn | 178 ++++++++ game/ui/windows/SpellContainer.gd | 86 ++++ game/ui/windows/SpellContainer.tscn | 148 ++++++ game/ui/windows/SpellDragAndDropSpellBook.gd | 29 ++ game/ui/windows/TalentWindow.gd | 80 ++++ game/ui/windows/TalentWindow.tscn | 76 ++++ game/ui/windows/VBoxContainer.gd | 17 + game/ui/windows/base/BaseWindow.tscn | 79 ++++ .../windows/base/PagedContentContainer.tscn | 56 +++ game/ui/windows/base/ScrollContainer.tscn | 22 + game/ui/windows/inventory/ItemEntry.tscn | 54 +++ 142 files changed, 7711 insertions(+) create mode 100644 game/ui/actionbars/ActionBar.gd create mode 100644 game/ui/actionbars/ActionBar.tscn create mode 100644 game/ui/actionbars/ActionBarEntry.gd create mode 100644 game/ui/actionbars/ActionBarEntry.tscn create mode 100644 game/ui/actionbars/Actionbars.gd create mode 100644 game/ui/actionbars/EditorKeybindSetup.gd create mode 100644 game/ui/auraframe/AuraEntry.gd create mode 100644 game/ui/auraframe/AuraEntry.tscn create mode 100644 game/ui/auraframe/AuraFrame.gd create mode 100644 game/ui/auraframe/AuraFrame.tscn create mode 100644 game/ui/bags/Bag.tscn create mode 100644 game/ui/bags/BagEntry.gd create mode 100644 game/ui/bags/BagEntry.tscn create mode 100644 game/ui/bags/BagFrame.gd create mode 100644 game/ui/bags/BagFrame.tscn create mode 100644 game/ui/bags/EquipmentSlot.gd create mode 100644 game/ui/bags/EquipmentSlot.tscn create mode 100644 game/ui/bags/InventoryGUI.gd create mode 100644 game/ui/bags/ItemPupop.gd create mode 100644 game/ui/bags/weapon_set_button_group.tres create mode 100644 game/ui/buttons/Buttons.gd create mode 100644 game/ui/castbar/Castbar.gd create mode 100644 game/ui/castbar/Castbar.tscn create mode 100644 game/ui/crafting/ItemEntry.gd create mode 100644 game/ui/crafting/ItemEntry.tscn create mode 100644 game/ui/crafting/RecipeSelector.gd create mode 100644 game/ui/crafting/RecipeSelector.tscn create mode 100644 game/ui/debug/DebugInfo.gd create mode 100644 game/ui/debug/DebugInfo.tscn create mode 100644 game/ui/debug/SpawnPointSimpleUI.tscn create mode 100644 game/ui/debug/debuginfo_font.tres create mode 100644 game/ui/errorframe/ErrorFrame.tscn create mode 100644 game/ui/ingame_menu/ExitButton.gd create mode 100644 game/ui/ingame_menu/IngameMenu.tscn create mode 100644 game/ui/keybinds/KeybindCategory.gd create mode 100644 game/ui/keybinds/KeybindCategory.tscn create mode 100644 game/ui/keybinds/KeybindEntry.gd create mode 100644 game/ui/keybinds/KeybindEntry.tscn create mode 100644 game/ui/keybinds/Keybinds.gd create mode 100644 game/ui/keybinds/Keybinds.tscn create mode 100644 game/ui/login/Login.tscn create mode 100644 game/ui/loot_window/LootEntry.gd create mode 100644 game/ui/loot_window/LootEntry.tscn create mode 100644 game/ui/loot_window/LootWindow.gd create mode 100644 game/ui/loot_window/LootWindow.tscn create mode 100644 game/ui/map/Map.tscn create mode 100644 game/ui/minimap/MiniMap.tscn create mode 100644 game/ui/nameplates/NamePlate.tscn create mode 100644 game/ui/nameplates/name_plate_dynamicfont.tres create mode 100644 game/ui/nameplates/name_plate_theme.tres create mode 100644 game/ui/nameplates/texture_progress_bg.tres create mode 100644 game/ui/nameplates/texture_progress_fg.tres create mode 100644 game/ui/numbers/Number.gd create mode 100644 game/ui/numbers/Number.tscn create mode 100644 game/ui/numbers/number_font.tres create mode 100644 game/ui/options/OptionCheckBox.gd create mode 100644 game/ui/options/OptionRow.gd create mode 100644 game/ui/options/Options.tscn create mode 100644 game/ui/options/Threads.gd create mode 100644 game/ui/player_ui/RemoveProfile.gd create mode 100644 game/ui/player_ui/player_ui.gd create mode 100644 game/ui/player_ui/player_ui.tscn create mode 100644 game/ui/register/Register.tscn create mode 100644 game/ui/spellbook/SpellEntryPopup.gd create mode 100644 game/ui/starmap/StarMap.tscn create mode 100644 game/ui/talents/Spec.gd create mode 100644 game/ui/talents/Spec.tscn create mode 100644 game/ui/talents/TalentEntry.gd create mode 100644 game/ui/talents/TalentEntry.tscn create mode 100644 game/ui/talents/TalentRow.gd create mode 100644 game/ui/talents/TalentRow.tscn create mode 100644 game/ui/talents/talent_switcher_button.gd create mode 100644 game/ui/talents/talent_switcher_button.tscn create mode 100644 game/ui/theme/GameUI.png create mode 100644 game/ui/theme/GameUI.png.import create mode 100644 game/ui/theme/actionbar_dynamicfont.tres create mode 100644 game/ui/theme/bag_icon.tres create mode 100644 game/ui/theme/button_bg_atlas.tres create mode 100644 game/ui/theme/button_bg_stylebox.tres create mode 100644 game/ui/theme/button_bg_stylebox_disabled.tres create mode 100644 game/ui/theme/button_bg_stylebox_focus.tres create mode 100644 game/ui/theme/button_bg_stylebox_hover.tres create mode 100644 game/ui/theme/button_bg_stylebox_pressed.tres create mode 100644 game/ui/theme/checkbox_checked_texture.tres create mode 100644 game/ui/theme/checkbox_texture.tres create mode 100644 game/ui/theme/cooldown_progress.png create mode 100644 game/ui/theme/cooldown_progress.png.import create mode 100644 game/ui/theme/dropdown_icon.tres create mode 100644 game/ui/theme/h_scroll_bar_texture.tres create mode 100644 game/ui/theme/indicator.png create mode 100644 game/ui/theme/indicator.png.import create mode 100644 game/ui/theme/lineedit_normal_style.tres create mode 100644 game/ui/theme/locked_icon.tres create mode 100644 game/ui/theme/panel_bg.tres create mode 100644 game/ui/theme/panel_bg_atlas.tres create mode 100644 game/ui/theme/radio_checked_texture.tres create mode 100644 game/ui/theme/radio_texture.tres create mode 100644 game/ui/theme/scrollbar_bg.tres create mode 100644 game/ui/theme/scrollbar_bg_atlas.tres create mode 100644 game/ui/theme/scrollbar_bg_focus.tres create mode 100644 game/ui/theme/scrollbar_grabber.tres create mode 100644 game/ui/theme/scrollbar_grabber_atlas.tres create mode 100644 game/ui/theme/scrollbar_grabber_highlight.tres create mode 100644 game/ui/theme/scrollbar_grabber_pressed.tres create mode 100644 game/ui/theme/separator_stylebox.tres create mode 100644 game/ui/theme/separator_texture.tres create mode 100644 game/ui/theme/spellbook_icon.tres create mode 100644 game/ui/theme/ui_dynamicfont.tres create mode 100644 game/ui/theme/ui_dynamicfont_small.tres create mode 100644 game/ui/theme/ui_theme.tres create mode 100644 game/ui/theme/unlocked_icon.tres create mode 100644 game/ui/theme/window_bg_atlas.tres create mode 100644 game/ui/theme/window_bg_bg.tres create mode 100644 game/ui/touch_pad/TurnPanel.gd create mode 100644 game/ui/touch_pad/analog.gd create mode 100644 game/ui/touch_pad/analog.tscn create mode 100644 game/ui/touch_pad/analog.xml create mode 100644 game/ui/touch_pad/big_circle.png create mode 100644 game/ui/touch_pad/big_circle.png.import create mode 100644 game/ui/touch_pad/small_circle.png create mode 100644 game/ui/touch_pad/small_circle.png.import create mode 100644 game/ui/unitframes/TargetUnitframe.gd create mode 100644 game/ui/unitframes/TargetUnitframe.tscn create mode 100644 game/ui/unitframes/UnitframeBase.gd create mode 100644 game/ui/unitframes/UnitframeBase.tscn create mode 100644 game/ui/windows/CharacterWindow.tscn create mode 100644 game/ui/windows/CraftItemDescription.gd create mode 100644 game/ui/windows/CraftingWindow.gd create mode 100644 game/ui/windows/CraftingWindow.tscn create mode 100644 game/ui/windows/InventoryWindow.tscn create mode 100644 game/ui/windows/SpellBookWindow.gd create mode 100644 game/ui/windows/SpellBookWindow.tscn create mode 100644 game/ui/windows/SpellContainer.gd create mode 100644 game/ui/windows/SpellContainer.tscn create mode 100644 game/ui/windows/SpellDragAndDropSpellBook.gd create mode 100644 game/ui/windows/TalentWindow.gd create mode 100644 game/ui/windows/TalentWindow.tscn create mode 100644 game/ui/windows/VBoxContainer.gd create mode 100644 game/ui/windows/base/BaseWindow.tscn create mode 100644 game/ui/windows/base/PagedContentContainer.tscn create mode 100644 game/ui/windows/base/ScrollContainer.tscn create mode 100644 game/ui/windows/inventory/ItemEntry.tscn diff --git a/game/ui/actionbars/ActionBar.gd b/game/ui/actionbars/ActionBar.gd new file mode 100644 index 00000000..9d658142 --- /dev/null +++ b/game/ui/actionbars/ActionBar.gd @@ -0,0 +1,48 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (PackedScene) var action_bar_entry_scene +export (NodePath) var child_container_path +var child_container + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + child_container = get_node(child_container_path) +# pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + +func set_actionbar_entry(action_bar_entry : ActionBarEntry, player: Entity) -> void: + #rect_size = Vector2(action_bar_entry.size, (action_bar_entry.size) * action_bar_entry.slot_num) + #set_anchors_preset(Control.PRESET_BOTTOM_RIGHT, false) + #margin_left = action_bar_entry.action_bar_id * -(action_bar_entry.size + 5) - 10 + + margin_top = - ((action_bar_entry.size) * action_bar_entry.slot_num) + #margin_bottom = 0 + margin_right = -((action_bar_entry.action_bar_id - 1) * action_bar_entry.size) + margin_left = -((action_bar_entry.action_bar_id) * action_bar_entry.size) + + for i in range(action_bar_entry.slot_num): + var b : ActionBarButtonEntry = action_bar_entry.get_button_for_slotid(i) + + #for i in range(action_bar_entry.get_action_bar_entry_count()): + #var b = action_bar_entry.get_button(i) + + var s : Node = action_bar_entry_scene.instance() + + child_container.add_child(s) + + s.set_player(player) + s.set_button_entry(b, player) + + s.owner = child_container + diff --git a/game/ui/actionbars/ActionBar.tscn b/game/ui/actionbars/ActionBar.tscn new file mode 100644 index 00000000..e7ebea09 --- /dev/null +++ b/game/ui/actionbars/ActionBar.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/actionbars/ActionBarEntry.tscn" type="PackedScene" id=1] +[ext_resource path="res://ui/actionbars/ActionBar.gd" type="Script" id=2] + +[node name="ActionBar" type="Control"] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -63.0 +margin_top = -580.0 +mouse_filter = 2 +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} +action_bar_entry_scene = ExtResource( 1 ) +child_container_path = NodePath("GridContainer") + +[node name="GridContainer" type="GridContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/vseparation = 0 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/actionbars/ActionBarEntry.gd b/game/ui/actionbars/ActionBarEntry.gd new file mode 100644 index 00000000..aeb44e57 --- /dev/null +++ b/game/ui/actionbars/ActionBarEntry.gd @@ -0,0 +1,276 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var button_path : NodePath +export (NodePath) var icon_path : NodePath +export (NodePath) var cooldown_indicator_path : NodePath +export (NodePath) var cooldown_text_path : NodePath +export (NodePath) var keybind_text_path : NodePath + +var button : Button +var icon_rect : TextureRect +var cooldown_indicator : TextureProgress +var cooldown_text : Label +var keybind_text : Label + +var button_entry : ActionBarButtonEntry +var player : Entity + +var spell_id : int = 0 +var spell_type : int = 0 + +var cd : Cooldown = null +var categ_cd : CategoryCooldown = null + +var has_gcd : bool = false +var gcd : float = 0.0 + +func _ready() -> void: + button = get_node(button_path) as Button + icon_rect = get_node(icon_path) as TextureRect + + cooldown_indicator = get_node(cooldown_indicator_path) as TextureProgress + cooldown_text = get_node(cooldown_text_path) as Label + keybind_text = get_node(keybind_text_path) as Label + + button.connect("pressed", self, "_on_button_pressed") + +func _exit_tree(): + if icon_rect.texture != null: + ThemeAtlas.unref_texture(icon_rect.texture) + +func _process(delta : float) -> void: + if cd == null and categ_cd == null and gcd < 0.001: + set_process(false) + hide_cooldown_timer() + return + + if gcd > 0.001: + gcd -= delta + + if gcd < 0: + gcd = 0 + + var value : float = gcd + + if cd != null and cd.remaining > value: + value = cd.remaining + + if categ_cd != null and categ_cd.remaining > value: + value = categ_cd.remaining + + set_cooldown_time(value) + +func set_cooldown_time(time : float) -> void: + cooldown_indicator.value = time + cooldown_text.text = str(int(time)) + +func show_cooldown_timer(max_time : float) -> void: + if cooldown_indicator.visible and cooldown_indicator.max_value < max_time: + cooldown_indicator.max_value = max_time + + if not cooldown_indicator.visible: + cooldown_indicator.max_value = max_time + + cooldown_indicator.show() + cooldown_text.show() + +func hide_cooldown_timer() -> void: + cooldown_indicator.hide() + cooldown_text.hide() + +func set_button_entry(action_bar_button_entry: ActionBarButtonEntry, p_player: Entity) -> void: + player = p_player + + button_entry = action_bar_button_entry + + var iea : InputEventAction = InputEventAction.new() + + var action_name : String = "actionbar_" + str(action_bar_button_entry.action_bar_id) + "_" + str(action_bar_button_entry.slot_id) + + if not InputMap.has_action(action_name): + InputMap.add_action(action_name) + + var action_list : Array = InputMap.get_action_list(action_name) + + for action in action_list: + if action is InputEventKey: + var s : String = "" + + if action.shift: + s += "S-" + + if action.alt: + s += "A-" + + if action.control: + s += "C-" + + if action.command: + s += "Co-" + + if action.meta: + s += "M-" + + s += char(action.scancode) + + keybind_text.text = s + + iea.action = action_name + iea.pressed = true + var sc : ShortCut = ShortCut.new() + sc.shortcut = iea + shortcut = sc + + setup_icon() + +func setup_icon() -> void: + if (button_entry.type == ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_NONE): + if icon_rect.texture != null: + ThemeAtlas.unref_texture(icon_rect.texture) + + icon_rect.texture = null + elif (button_entry.type == ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_SPELL): + if (button_entry.item_id == 0): + if icon_rect.texture != null: + ThemeAtlas.unref_texture(icon_rect.texture) + + icon_rect.texture = null + return + + if icon_rect.texture != null: + ThemeAtlas.unref_texture(icon_rect.texture) + icon_rect.texture = null + + var spell = Entities.get_spell(button_entry.item_id) + + if spell.icon != null: + icon_rect.texture = ThemeAtlas.add_texture(spell.icon) +# icon_rect.texture = spell.icon + + spell_id = spell.id + spell_type = spell.spell_type + has_gcd = spell.cooldown_global_cooldown + +func _on_button_pressed() -> void: + if (button_entry.type == ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_SPELL): + if (button_entry.item_id == 0): + return + + player.crequest_spell_cast(button_entry.item_id) + +func set_button_entry_data(type: int, item_id: int) -> void: + button_entry.type = type + button_entry.itekm_id = item_id + + setup_icon() + +func get_drag_data(pos: Vector2) -> Object: + if (button_entry.type == ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_NONE): + return null + + if player.actionbar_locked: + return null + + var tr = TextureRect.new() + tr.texture = icon_rect.texture + tr.expand = true + + tr.rect_size = icon_rect.rect_size + set_drag_preview(tr) + + var esd = ESDragAndDrop.new() + + if (button_entry.type == ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_SPELL): + esd.type = ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_SPELL + elif (button_entry.type == ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_ITEM): + esd.type = ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_ITEM + + esd.item_id = button_entry.item_id + + button_entry.type = ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_NONE + button_entry.item_id = 0 + +# Profiles.save() + + setup_icon() + + return esd + +func can_drop_data(pos, data) -> bool: + return data.is_class("ESDragAndDrop") + + +func drop_data(pos, esd) -> void: + if (esd.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_SPELL): + button_entry.type = ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_SPELL + elif (esd.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_ITEM): + button_entry.type = ActionBarButtonEntry.ACTION_BAR_BUTTON_ENTRY_TYPE_ITEM + + button_entry.item_id = esd.item_id + + setup_icon() + +func set_player(p_player: Entity) -> void: + if not player == null: + player.disconnect("ccooldown_added", self, "_ccooldown_added") + player.disconnect("ccooldown_removed", self, "_ccooldown_removed") + player.disconnect("ccategory_cooldown_added", self, "_ccategory_cooldown_added") + player.disconnect("ccategory_cooldown_removed", self, "_ccategory_cooldown_removed") + + player.disconnect("cgcd_started", self, "_cgcd_started") + player.disconnect("cgcd_finished", self, "_cgcd_finished") + + player = null + + player = p_player + + if player == null: + return + +# for i in range(player.getc_cooldown_count()): +# var cooldown : Cooldown = player.getc_cooldown(i) + + player.connect("ccooldown_added", self, "_ccooldown_added") + player.connect("ccooldown_removed", self, "_ccooldown_removed") + player.connect("ccategory_cooldown_added", self, "_ccategory_cooldown_added") + player.connect("ccategory_cooldown_removed", self, "_ccategory_cooldown_removed") + + player.connect("cgcd_started", self, "_cgcd_started") + player.connect("cgcd_finished", self, "_cgcd_finished") + + +func _ccooldown_added(cooldown : Cooldown) -> void: + if cooldown.spell_id == spell_id: + cd = cooldown + set_process(true) + show_cooldown_timer(cooldown.remaining) + +func _ccooldown_removed(cooldown : Cooldown) -> void: + if cooldown.spell_id == spell_id: + cd = null + +func _ccategory_cooldown_added(cooldown : CategoryCooldown) -> void: + if cooldown.category_id == spell_type: + categ_cd = cooldown + set_process(true) + show_cooldown_timer(cooldown.remaining) + +func _ccategory_cooldown_removed(cooldown : CategoryCooldown) -> void: + if cooldown.category_id == spell_type: + categ_cd = null + + +func _cgcd_started(value :float) -> void: + if not has_gcd: + return + + gcd = value + show_cooldown_timer(value) + set_process(true) + +func _cgcd_finished() -> void: + gcd = 0 diff --git a/game/ui/actionbars/ActionBarEntry.tscn b/game/ui/actionbars/ActionBarEntry.tscn new file mode 100644 index 00000000..8f457214 --- /dev/null +++ b/game/ui/actionbars/ActionBarEntry.tscn @@ -0,0 +1,93 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/actionbars/ActionBarEntry.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/cooldown_progress.png" type="Texture" id=2] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=3] +[ext_resource path="res://ui/theme/actionbar_dynamicfont.tres" type="DynamicFont" id=5] + +[node name="ActionBarEntry" type="TouchButton"] +margin_top = 1.0 +margin_right = 70.0 +margin_bottom = 71.0 +focus_mode = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme = ExtResource( 3 ) +shortcut_in_tooltip = false +action_mode = 0 +button_mask = 3 +enabled_focus_mode = 0 +keep_pressed_outside = true +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +button_path = NodePath(".") +icon_path = NodePath("MarginContainer/TextureRect") +cooldown_indicator_path = NodePath("CooldownIndicator") +cooldown_text_path = NodePath("CooldownText") +keybind_text_path = NodePath("KeybindText") + +[node name="MarginContainer" type="MarginContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TextureRect" type="TextureRect" parent="MarginContainer"] +margin_left = 2.0 +margin_top = 2.0 +margin_right = 68.0 +margin_bottom = 68.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true + +[node name="CooldownIndicator" type="TextureProgress" parent="."] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +step = 0.0 +texture_progress = ExtResource( 2 ) +fill_mode = 5 +nine_patch_stretch = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CooldownText" type="Label" parent="."] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_fonts/font = ExtResource( 5 ) +align = 1 +valign = 1 +clip_text = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="KeybindText" type="Label" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 2.0 +margin_top = 2.0 +margin_right = -2.0 +margin_bottom = -2.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/actionbars/Actionbars.gd b/game/ui/actionbars/Actionbars.gd new file mode 100644 index 00000000..8f503c67 --- /dev/null +++ b/game/ui/actionbars/Actionbars.gd @@ -0,0 +1,52 @@ +extends Node + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var actionbar_scene + +var _player : Entity + + +func set_player(p_player: Entity) -> void: + if not _player == null: + clear_actionbars() + _player.disconnect("centity_data_changed", self, "_centity_data_changed") + _player = null + + _player = p_player + + if _player == null: + return + + _centity_data_changed(_player.centity_data) + _player.connect("centity_data_changed", self, "_centity_data_changed") + +func _centity_data_changed(cls: EntityData) -> void: + clear_actionbars() + + if cls == null: + return + + var abp = _player.get_action_bar_profile() + + for i in range(abp.get_action_bar_count()): + var abe = abp.get_action_bar(i) + var s = actionbar_scene.instance() + + add_child(s) + + s.set_actionbar_entry(abe, _player) + + s.owner = self + + + +func clear_actionbars() -> void: + var children = get_children() + + for c in children: + c.queue_free() + + diff --git a/game/ui/actionbars/EditorKeybindSetup.gd b/game/ui/actionbars/EditorKeybindSetup.gd new file mode 100644 index 00000000..92c1e863 --- /dev/null +++ b/game/ui/actionbars/EditorKeybindSetup.gd @@ -0,0 +1,37 @@ +tool +extends Node + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(bool) var create = false setget createf +export(bool) var delete = false setget deletef + + +func createf(value : bool) -> void: + if not value: + return + + for i in range(6): + for j in range(12): + var actionstr : String = "input/actionbar_" + str(i) + "_" + str(j) + + var action : Dictionary = Dictionary() + action["events"] = Array() + action["deadzone"] = 0.5 + + ProjectSettings.set(name, actionstr) + ProjectSettings.save() + + +func deletef(value : bool) -> void: + if not value: + return + + for i in range(6): + for j in range(12): + var action : String = "input/actionbar_" + str(i) + "_" + str(j) + + ProjectSettings.clear(action) + ProjectSettings.save() diff --git a/game/ui/auraframe/AuraEntry.gd b/game/ui/auraframe/AuraEntry.gd new file mode 100644 index 00000000..66f08acc --- /dev/null +++ b/game/ui/auraframe/AuraEntry.gd @@ -0,0 +1,79 @@ +extends VBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var texture_rect_path : NodePath +export (NodePath) var tooltip_node_path : NodePath +export (NodePath) var time_label_path : NodePath + +export (NodePath) var magic_bg_path : NodePath +export (NodePath) var bleed_bg_path : NodePath +export (NodePath) var poison_bg_path : NodePath +export (NodePath) var physical_bg_path : NodePath +export (NodePath) var curse_bg_path : NodePath + +var texture_rect : TextureRect +var tooltip_node : Control +var time_label : Label + +var magic_bg : Node +var bleed_bg : Node +var poison_bg : Node +var physical_bg : Node +var curse_bg : Node + +var aura_data : AuraData + +func _ready(): + set_process(false) + + texture_rect = get_node(texture_rect_path) as TextureRect + tooltip_node = get_node(tooltip_node_path) as Control + time_label = get_node(time_label_path) as Label + + magic_bg = get_node(magic_bg_path) as Node + bleed_bg = get_node(bleed_bg_path) as Node + poison_bg = get_node(poison_bg_path) as Node + physical_bg = get_node(physical_bg_path) as Node + curse_bg = get_node(curse_bg_path) as Node + +func _process(delta): +# if not aura_data.is_timed: +# return + + time_label.text = str(int(aura_data.remaining_time)) + "s" + + if (aura_data.remaining_time <= 0): + queue_free() + +func set_aura_data(paura_data : AuraData): + aura_data = paura_data + + if aura_data.is_timed: + set_process(true) + time_label.text = str(aura_data.remaining_time) + else: + set_process(false) + time_label.text = "" + + tooltip_node.hint_tooltip = aura_data.aura.text_description + texture_rect.texture = aura_data.aura.icon + + if aura_data.aura.debuff: + var aura_type : int = aura_data.aura.aura_type + + if aura_type == SpellEnums.AURA_TYPE_MAGIC: + magic_bg.visible = true + elif aura_type == SpellEnums.AURA_TYPE_BLEED: + bleed_bg.visible = true + elif aura_type == SpellEnums.AURA_TYPE_CURSE: + curse_bg.visible = true + elif aura_type == SpellEnums.AURA_TYPE_PHYSICAL: + physical_bg.visible = true + elif aura_type == SpellEnums.AURA_TYPE_POISON: + poison_bg.visible = true + +func get_aura_data() -> AuraData: + return aura_data diff --git a/game/ui/auraframe/AuraEntry.tscn b/game/ui/auraframe/AuraEntry.tscn new file mode 100644 index 00000000..71543256 --- /dev/null +++ b/game/ui/auraframe/AuraEntry.tscn @@ -0,0 +1,94 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/auraframe/AuraEntry.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/ui_dynamicfont_small.tres" type="DynamicFont" id=2] + +[node name="AuraEntry" type="VBoxContainer"] +margin_right = 30.0 +margin_bottom = 51.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +texture_rect_path = NodePath("MarginContainer/MarginContainer/TextureRect") +tooltip_node_path = NodePath("MarginContainer/MarginContainer") +time_label_path = NodePath("MarginContainer2/Label") +magic_bg_path = NodePath("MarginContainer/MagicBG") +bleed_bg_path = NodePath("MarginContainer/BleedBG") +poison_bg_path = NodePath("MarginContainer/PoisonBG") +physical_bg_path = NodePath("MarginContainer/PhysicalBG") +curse_bg_path = NodePath("MarginContainer/CurseBG") + +[node name="MarginContainer" type="MarginContainer" parent="."] +margin_right = 30.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 30, 30 ) +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="MagicBG" type="ColorRect" parent="MarginContainer"] +visible = false +margin_right = 30.0 +margin_bottom = 30.0 +color = Color( 0.215686, 0.0666667, 0.772549, 1 ) + +[node name="BleedBG" type="ColorRect" parent="MarginContainer"] +visible = false +margin_right = 30.0 +margin_bottom = 30.0 +color = Color( 0.541176, 0, 0, 1 ) + +[node name="PoisonBG" type="ColorRect" parent="MarginContainer"] +visible = false +margin_right = 30.0 +margin_bottom = 30.0 +color = Color( 0, 0.301961, 0.027451, 1 ) + +[node name="PhysicalBG" type="ColorRect" parent="MarginContainer"] +visible = false +margin_right = 30.0 +margin_bottom = 30.0 +color = Color( 0.27451, 0.0627451, 0.0627451, 1 ) + +[node name="CurseBG" type="ColorRect" parent="MarginContainer"] +visible = false +margin_right = 30.0 +margin_bottom = 30.0 +color = Color( 0.172549, 0.0588235, 0.262745, 1 ) + +[node name="MarginContainer" type="MarginContainer" parent="MarginContainer"] +margin_right = 30.0 +margin_bottom = 30.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/margin_right = 1 +custom_constants/margin_top = 1 +custom_constants/margin_left = 1 +custom_constants/margin_bottom = 1 + +[node name="TextureRect" type="TextureRect" parent="MarginContainer/MarginContainer"] +margin_left = 1.0 +margin_top = 1.0 +margin_right = 29.0 +margin_bottom = 29.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true + +[node name="MarginContainer2" type="MarginContainer" parent="."] +margin_top = 38.0 +margin_right = 30.0 +margin_bottom = 51.0 +rect_min_size = Vector2( 30, 10 ) +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Label" type="Label" parent="MarginContainer2"] +margin_right = 30.0 +margin_bottom = 13.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_fonts/font = ExtResource( 2 ) +align = 1 +valign = 1 +max_lines_visible = 1 diff --git a/game/ui/auraframe/AuraFrame.gd b/game/ui/auraframe/AuraFrame.gd new file mode 100644 index 00000000..835612c5 --- /dev/null +++ b/game/ui/auraframe/AuraFrame.gd @@ -0,0 +1,59 @@ +extends MarginContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (PackedScene) var aura_entry_scene : PackedScene + +export (NodePath) var buff_container_path : NodePath +export (NodePath) var debuff_container_path : NodePath + +var buff_container_node : Node +var debuff_container_node : Node + +var buff_nodes : Array +var debuff_nodes : Array + +var entity : Entity + +func _ready(): + buff_container_node = get_node(buff_container_path) + debuff_container_node = get_node(debuff_container_path) + +func set_target(pentity : Entity) -> void: + if entity != null: + pass + + entity = pentity + entity.connect("caura_added", self, "on_caura_added") + entity.connect("caura_removed", self, "on_caura_removed") + +func on_caura_added(aura_data : AuraData) -> void: + var created_node : Node = aura_entry_scene.instance() + + if (not aura_data.aura.debuff): + buff_container_node.add_child(created_node) + created_node.owner = buff_container_node + else: + debuff_container_node.add_child(created_node) + created_node.owner = debuff_container_node + + created_node.set_aura_data(aura_data) + +func on_caura_removed(aura_data : AuraData) -> void: + if (not aura_data.aura.debuff): + for bn in buff_container_node.get_children(): + if bn.get_aura_data() == aura_data: + buff_container_node.remove_child(bn) + bn.queue_free() + return + else: + for bn in debuff_container_node.get_children(): + if bn.get_aura_data() == aura_data: + debuff_container_node.remove_child(bn) + bn.queue_free() + return + +func set_player(player : Entity) -> void: + set_target(player) diff --git a/game/ui/auraframe/AuraFrame.tscn b/game/ui/auraframe/AuraFrame.tscn new file mode 100644 index 00000000..e7682d56 --- /dev/null +++ b/game/ui/auraframe/AuraFrame.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/auraframe/AuraFrame.gd" type="Script" id=1] +[ext_resource path="res://ui/auraframe/AuraEntry.tscn" type="PackedScene" id=2] + +[node name="AuraFrame" type="MarginContainer"] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -376.0 +margin_right = -1.0 +margin_bottom = 160.0 +mouse_filter = 2 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +aura_entry_scene = ExtResource( 2 ) +buff_container_path = NodePath("VBoxContainer/Buffs") +debuff_container_path = NodePath("VBoxContainer/Debuffs") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_right = 375.0 +margin_bottom = 160.0 +mouse_filter = 2 + +[node name="Buffs" type="GridContainer" parent="VBoxContainer"] +margin_right = 375.0 +margin_bottom = 76.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 9 + +[node name="Debuffs" type="GridContainer" parent="VBoxContainer"] +margin_top = 84.0 +margin_right = 375.0 +margin_bottom = 160.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 9 diff --git a/game/ui/bags/Bag.tscn b/game/ui/bags/Bag.tscn new file mode 100644 index 00000000..67acfdb4 --- /dev/null +++ b/game/ui/bags/Bag.tscn @@ -0,0 +1,323 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://ui/bags/InventoryGUI.gd" type="Script" id=2] +[ext_resource path="res://ui/bags/BagEntry.tscn" type="PackedScene" id=3] +[ext_resource path="res://ui/bags/EquipmentSlot.tscn" type="PackedScene" id=4] +[ext_resource path="res://ui/bags/ItemPupop.gd" type="Script" id=5] + +[node name="Inventory" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 1 ) +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} +inventory_item_scene = ExtResource( 3 ) +inventory_item_container_path = NodePath("VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer/ScrollContainer/GridContainer") +item_tooltip_path = NodePath("TooltipContainer/ItemTooltip") +inventory_slots = [ NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer/Head"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer2/Neck"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer2/Shoulder"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer3/Chest"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer2/Hands"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer4/Belt"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer5/Legs"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer5/Feet"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer3/Ring1"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer3/Ring2"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer4/Trinket1"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer4/Trinket2"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer6/PanelContainer/HBoxContainer/MainHand"), NodePath("VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer6/PanelContainer/HBoxContainer/OffHand") ] + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 26.0 + +[node name="BagName" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 5.0 +margin_right = 982.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +size_flags_vertical = 6 +text = "Inventory" +align = 1 + +[node name="CloseButton" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 986.0 +margin_right = 1016.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 30, 20 ) +text = "X" + +[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 34.0 +margin_right = 1016.0 +margin_bottom = 592.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +alignment = 1 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/HBoxContainer3"] +margin_right = 227.96 +margin_bottom = 558.0 +rect_min_size = Vector2( 227.96, 0 ) + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 223.96 +margin_bottom = 554.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/separation = 10 +alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer"] +margin_top = 96.0 +margin_right = 219.0 +margin_bottom = 146.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="Head" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer" instance=ExtResource( 4 )] + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer"] +margin_top = 156.0 +margin_right = 219.0 +margin_bottom = 206.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="Shoulder" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer2" instance=ExtResource( 4 )] +margin_left = 30.0 +margin_right = 80.0 +text = "sh" +equip_slot = 2 + +[node name="Neck" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer2" instance=ExtResource( 4 )] +text = "Neck" +equip_slot = 1 + +[node name="Hands" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer2" instance=ExtResource( 4 )] +margin_left = 138.0 +margin_right = 188.0 +text = "Hands" +equip_slot = 4 + +[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer"] +margin_top = 216.0 +margin_right = 219.0 +margin_bottom = 266.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="Ring1" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer3" instance=ExtResource( 4 )] +margin_left = 30.0 +margin_right = 80.0 +text = "Ring" +equip_slot = 8 +texture_path = NodePath("../Ring1/MarginContainer/TextureRect") + +[node name="Chest" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer3" instance=ExtResource( 4 )] +text = "Chest" +equip_slot = 3 + +[node name="Ring2" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer3" instance=ExtResource( 4 )] +margin_left = 138.0 +margin_right = 188.0 +text = "Ring" +equip_slot = 9 + +[node name="HBoxContainer4" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer"] +margin_top = 276.0 +margin_right = 219.0 +margin_bottom = 326.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="Trinket1" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer4" instance=ExtResource( 4 )] +margin_left = 30.0 +margin_right = 80.0 +text = "Tr" +equip_slot = 10 + +[node name="Belt" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer4" instance=ExtResource( 4 )] +text = "Belt" +equip_slot = 5 + +[node name="Trinket2" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer4" instance=ExtResource( 4 )] +margin_left = 138.0 +margin_right = 188.0 +text = "Tr" +equip_slot = 11 + +[node name="HBoxContainer5" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer"] +margin_top = 336.0 +margin_right = 219.0 +margin_bottom = 386.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="Legs" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer5" instance=ExtResource( 4 )] +margin_left = 57.0 +margin_right = 107.0 +text = "Legs" +equip_slot = 6 + +[node name="Feet" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer5" instance=ExtResource( 4 )] +margin_left = 111.0 +margin_right = 161.0 +text = "Feet" +equip_slot = 7 + +[node name="HBoxContainer6" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer"] +margin_top = 396.0 +margin_right = 219.0 +margin_bottom = 454.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer6"] +margin_left = 53.0 +margin_right = 165.0 +margin_bottom = 58.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer6/PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 108.0 +margin_bottom = 54.0 + +[node name="MainHand" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer6/PanelContainer/HBoxContainer" instance=ExtResource( 4 )] +margin_left = 0.0 +margin_right = 50.0 +text = "MH" +equip_slot = 12 + +[node name="OffHand" parent="VBoxContainer/HBoxContainer3/PanelContainer/VBoxContainer/HBoxContainer6/PanelContainer/HBoxContainer" instance=ExtResource( 4 )] +margin_left = 54.0 +margin_right = 104.0 +text = "OH" +equip_slot = 13 +texture_path = NodePath("../OffHand/MarginContainer/TextureRect") + +[node name="PanelContainer2" type="PanelContainer" parent="VBoxContainer/HBoxContainer3"] +margin_left = 231.0 +margin_right = 1016.0 +margin_bottom = 558.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer2"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 781.0 +margin_bottom = 554.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer"] +margin_right = 777.0 +margin_bottom = 516.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +scroll_horizontal_enabled = false + +[node name="GridContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer/ScrollContainer"] +size_flags_horizontal = 2 +size_flags_vertical = 2 +custom_constants/vseparation = 5 +custom_constants/hseparation = 5 +columns = 6 + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer"] +margin_top = 524.0 +margin_right = 777.0 +margin_bottom = 550.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer/HBoxContainer2"] +margin_top = 5.0 +margin_right = 743.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +text = "190 " +align = 2 + +[node name="ResizeButton" type="Button" parent="VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer/HBoxContainer2"] +margin_left = 747.0 +margin_right = 777.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 30, 20 ) + +[node name="TooltipContainer" type="Control" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 +mouse_filter = 2 + +[node name="ItemTooltip" type="PopupPanel" parent="TooltipContainer"] +margin_right = 295.0 +margin_bottom = 223.0 +script = ExtResource( 5 ) +__meta__ = { +"_edit_use_anchors_": false +} +name_path = NodePath("../ItemTooltip/VBoxContainer/HBoxContainer/VBoxContainer/NameLabel") +description_path = NodePath("../ItemTooltip/VBoxContainer/DescriptionLabel") + +[node name="VBoxContainer" type="VBoxContainer" parent="TooltipContainer/ItemTooltip"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 291.0 +margin_bottom = 219.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="TooltipContainer/ItemTooltip/VBoxContainer"] +margin_right = 287.0 +margin_bottom = 26.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="TooltipContainer/ItemTooltip/VBoxContainer/HBoxContainer"] +margin_right = 249.0 +margin_bottom = 26.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +alignment = 1 + +[node name="NameLabel" type="RichTextLabel" parent="TooltipContainer/ItemTooltip/VBoxContainer/HBoxContainer/VBoxContainer"] +margin_top = 4.0 +margin_right = 249.0 +margin_bottom = 22.0 +rect_min_size = Vector2( 0, 18 ) +size_flags_horizontal = 3 +bbcode_enabled = true + +[node name="Button" type="Button" parent="TooltipContainer/ItemTooltip/VBoxContainer/HBoxContainer"] +margin_left = 257.0 +margin_right = 287.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 30, 20 ) +text = "X" + +[node name="HSeparator" type="HSeparator" parent="TooltipContainer/ItemTooltip/VBoxContainer"] +margin_top = 34.0 +margin_right = 287.0 +margin_bottom = 42.0 +size_flags_horizontal = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="DescriptionLabel" type="RichTextLabel" parent="TooltipContainer/ItemTooltip/VBoxContainer"] +margin_top = 50.0 +margin_right = 287.0 +margin_bottom = 215.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +bbcode_enabled = true +[connection signal="pressed" from="VBoxContainer/HBoxContainer/CloseButton" to="." method="hide"] +[connection signal="pressed" from="TooltipContainer/ItemTooltip/VBoxContainer/HBoxContainer/Button" to="TooltipContainer/ItemTooltip" method="hide"] diff --git a/game/ui/bags/BagEntry.gd b/game/ui/bags/BagEntry.gd new file mode 100644 index 00000000..e7eaecc2 --- /dev/null +++ b/game/ui/bags/BagEntry.gd @@ -0,0 +1,206 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var button_path : NodePath +export (NodePath) var icon_path : NodePath +export (NodePath) var cooldown_indicator_path : NodePath +export (NodePath) var cooldown_text_path : NodePath + +var _tooltip : Popup + +var button : Button +var icon_rect : TextureRect +var cooldown_indicator : TextureProgress +var cooldown_text : Label + +var slot_id : int = 0 +var item : ItemInstance +var player : Entity + +var spell_id : int = 0 +#var spell_type : int = 0 + +var cd : Cooldown = null + +var has_gcd : bool = false +var gcd : float = 0.0 + +func _ready() -> void: + button = get_node(button_path) as Button + icon_rect = get_node(icon_path) as TextureRect + + cooldown_indicator = get_node(cooldown_indicator_path) as TextureProgress + cooldown_text = get_node(cooldown_text_path) as Label + + button.connect("pressed", self, "_on_button_pressed") + +func _process(delta : float) -> void: + if cd == null and gcd < 0.001: + set_process(false) + hide_cooldown_timer() + return + + if gcd > 0.001: + gcd -= delta + + if gcd < 0: + gcd = 0 + + var value : float = gcd + + if cd != null and cd.remaining > value: + value = cd.remaining + + set_cooldown_time(value) + +func set_cooldown_time(time : float) -> void: + cooldown_indicator.value = time + cooldown_text.text = str(int(time)) + +func show_cooldown_timer(max_time : float) -> void: + if cooldown_indicator.visible and cooldown_indicator.max_value < max_time: + cooldown_indicator.max_value = max_time + + if not cooldown_indicator.visible: + cooldown_indicator.max_value = max_time + + cooldown_indicator.show() + cooldown_text.show() + +func hide_cooldown_timer() -> void: + cooldown_indicator.hide() + cooldown_text.hide() + +func set_item_instance(pitem : ItemInstance) -> void: + item = pitem + + setup_icon() + +func setup_icon() -> void: + if (item == null): + icon_rect.texture = null + else: + if (item.get_item_template() == null): + icon_rect.texture = null + return + + if item.item_template.use_spell != null: + var spell : Spell = item.item_template.use_spell + spell_id = spell.spell_id + has_gcd = spell.cooldown_global_cooldown + else: + spell_id = 0 + has_gcd = false + + icon_rect.texture = item.item_template.icon + + + +func _on_button_pressed() -> void: + #if spell_id != 0: + # player.crequest_spell_cast(button_entry.item_id) + pass + +func set_button_entry_data(ii : ItemInstance) -> void: + + item = ii + + setup_icon() + +func get_drag_data(pos: Vector2) -> Object: + if item == null: + return null + + var tr = TextureRect.new() + tr.texture = icon_rect.texture + tr.expand = true + + tr.rect_size = icon_rect.rect_size + set_drag_preview(tr) + + var esd = ESDragAndDrop.new() + + esd.origin = self + esd.type = ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM + esd.item_id = slot_id + + setup_icon() + + return esd + +func can_drop_data(pos, data) -> bool: + return (data.is_class("ESDragAndDrop") and (data.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM or + data.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_EQUIPPED_ITEM)) + + +func drop_data(pos, esd) -> void: + if esd.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM: + player.crequest_item_swap(slot_id, esd.item_id) + setup_icon() + elif esd.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_EQUIPPED_ITEM: + player.crequest_equip(esd.item_id, slot_id) + setup_icon() + +func set_slot_id(pslot_id : int) -> void: + slot_id = pslot_id + +func set_player(p_player: Entity) -> void: + if not player == null: + player.disconnect("ccooldown_added", self, "_ccooldown_added") + player.disconnect("ccooldown_removed", self, "_ccooldown_removed") + + player.disconnect("cgcd_started", self, "_cgcd_started") + player.disconnect("cgcd_finished", self, "_cgcd_finished") + + player = null + + player = p_player + + if player == null: + return + +# for i in range(player.getc_cooldown_count()): +# var cooldown : Cooldown = player.getc_cooldown(i) + + player.connect("ccooldown_added", self, "_ccooldown_added") + player.connect("ccooldown_removed", self, "_ccooldown_removed") + + player.connect("cgcd_started", self, "_cgcd_started") + player.connect("cgcd_finished", self, "_cgcd_finished") + + +func _ccooldown_added(cooldown : Cooldown) -> void: + if cooldown.spell_id == spell_id: + cd = cooldown + set_process(true) + show_cooldown_timer(cooldown.remaining) + +func _ccooldown_removed(cooldown : Cooldown) -> void: + if cooldown.spell_id == spell_id: + cd = null + +func _cgcd_started(value :float) -> void: + if not has_gcd: + return + + gcd = value + show_cooldown_timer(value) + set_process(true) + +func _cgcd_finished() -> void: + gcd = 0 + +func _pressed(): + if _tooltip != null and item != null: + var pos : Vector2 = rect_global_position + pos.x += rect_size.x + + _tooltip.set_item(item) + _tooltip.popup(Rect2(pos, _tooltip.rect_size)) +# _tooltip.pac + +func set_tooltip_node(tooltip : Popup) -> void: + _tooltip = tooltip diff --git a/game/ui/bags/BagEntry.tscn b/game/ui/bags/BagEntry.tscn new file mode 100644 index 00000000..7e7f2c6c --- /dev/null +++ b/game/ui/bags/BagEntry.tscn @@ -0,0 +1,80 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/bags/BagEntry.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/cooldown_progress.png" type="Texture" id=2] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=3] +[ext_resource path="res://ui/theme/actionbar_dynamicfont.tres" type="DynamicFont" id=5] + +[node name="BagEntry" type="Button"] +margin_top = 1.0 +margin_right = 45.0 +margin_bottom = 46.0 +rect_min_size = Vector2( 45, 45 ) +focus_mode = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme = ExtResource( 3 ) +shortcut_in_tooltip = false +action_mode = 0 +button_mask = 3 +enabled_focus_mode = 0 +keep_pressed_outside = true +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +button_path = NodePath(".") +icon_path = NodePath("MarginContainer/TextureRect") +cooldown_indicator_path = NodePath("CooldownIndicator") +cooldown_text_path = NodePath("CooldownText") + +[node name="MarginContainer" type="MarginContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TextureRect" type="TextureRect" parent="MarginContainer"] +margin_left = 2.0 +margin_top = 2.0 +margin_right = 43.0 +margin_bottom = 43.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true + +[node name="CooldownIndicator" type="TextureProgress" parent="."] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +step = 0.0 +texture_progress = ExtResource( 2 ) +fill_mode = 5 +nine_patch_stretch = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CooldownText" type="Label" parent="."] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_fonts/font = ExtResource( 5 ) +align = 1 +valign = 1 +clip_text = true +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/bags/BagFrame.gd b/game/ui/bags/BagFrame.gd new file mode 100644 index 00000000..5f6ffb15 --- /dev/null +++ b/game/ui/bags/BagFrame.gd @@ -0,0 +1,13 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var bag_scene : PackedScene +export(NodePath) var container_path : NodePath = "BagContainerFrame" + +var container : Control + +func _ready() -> void: + container = get_node(container_path) as Control diff --git a/game/ui/bags/BagFrame.tscn b/game/ui/bags/BagFrame.tscn new file mode 100644 index 00000000..69607ab2 --- /dev/null +++ b/game/ui/bags/BagFrame.tscn @@ -0,0 +1,51 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/bags/Bag.tscn" type="PackedScene" id=1] +[ext_resource path="res://ui/bags/BagFrame.gd" type="Script" id=2] + +[node name="BagFrame" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +script = ExtResource( 2 ) +__meta__ = { +"_edit_lock_": true, +"_edit_use_anchors_": false +} +bag_scene = ExtResource( 1 ) +container_path = NodePath("") + +[node name="BagOpenerFrame" type="HBoxContainer" parent="."] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -39.0 +margin_top = -37.0 +grow_horizontal = 0 +grow_vertical = 0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +alignment = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Button" type="Button" parent="BagOpenerFrame"] +margin_right = 40.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 40, 40 ) +text = "B" + +[node name="Bag" parent="." instance=ExtResource( 1 )] +visible = false +margin_left = 68.0 +margin_top = 115.0 +margin_right = 551.0 +margin_bottom = 432.0 +grow_horizontal = 0 +grow_vertical = 0 +rect_min_size = Vector2( 100, 0 ) +size_flags_horizontal = 10 +size_flags_vertical = 10 +[connection signal="pressed" from="BagOpenerFrame/Button" to="Bag" method="show"] diff --git a/game/ui/bags/EquipmentSlot.gd b/game/ui/bags/EquipmentSlot.gd new file mode 100644 index 00000000..14795d82 --- /dev/null +++ b/game/ui/bags/EquipmentSlot.gd @@ -0,0 +1,87 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(int) var equip_slot : int + +export(NodePath) var texture_path : NodePath + +var _texture : TextureRect +var _tooltip : Popup + +var _player : Entity + +var _item_instance : ItemInstance + +func _ready(): + _texture = get_node(texture_path) as TextureRect + +func set_tooltip_node(tooltip : Popup) -> void: + _tooltip = tooltip + +func set_player(player: Entity) -> void: + if _player != null: + _player.disconnect("con_equip_success", self, "con_equip_success") + + _player = player + + if _player == null: + return + + _player.connect("con_equip_success", self, "con_equip_success") + +func drop_data(position, data): + if _player == null: + return + + var dd : ESDragAndDrop = data as ESDragAndDrop + + if dd.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_EQUIPPED_ITEM: + #todo + return + + if dd.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM: + _player.crequest_equip(equip_slot, dd.item_id) + +func can_drop_data(position, data): + if _player == null: + return false + + if data is ESDragAndDrop and (data.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_EQUIPPED_ITEM or + data.type == ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM): + return true + + return false + +func get_drag_data(position): + if _item_instance == null: + return null + + var tr = TextureRect.new() + tr.texture = _texture.texture + tr.expand = true + + tr.rect_size = _texture.rect_size + set_drag_preview(tr) + + var esd = ESDragAndDrop.new() + + esd.origin = self + esd.type = ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_EQUIPPED_ITEM + esd.item_id = equip_slot + + return esd + +func con_equip_success(entity: Entity, pequip_slot: int, item: ItemInstance, old_item: ItemInstance, bag_slot: int): + if equip_slot != pequip_slot: + return + + _item_instance = item + + if item == null: + _texture.texture = null + return + + _texture.texture = item.item_template.icon diff --git a/game/ui/bags/EquipmentSlot.tscn b/game/ui/bags/EquipmentSlot.tscn new file mode 100644 index 00000000..da21a9ac --- /dev/null +++ b/game/ui/bags/EquipmentSlot.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/bags/EquipmentSlot.gd" type="Script" id=1] + +[node name="EquipmentSlot" type="Button"] +margin_left = 84.0 +margin_right = 134.0 +margin_bottom = 50.0 +rect_min_size = Vector2( 50, 50 ) +text = "Head" +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +texture_path = NodePath("MarginContainer/TextureRect") + +[node name="MarginContainer" type="MarginContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/margin_right = 5 +custom_constants/margin_top = 5 +custom_constants/margin_left = 5 +custom_constants/margin_bottom = 5 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TextureRect" type="TextureRect" parent="MarginContainer"] +margin_left = 5.0 +margin_top = 5.0 +margin_right = 76.0 +margin_bottom = 45.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true diff --git a/game/ui/bags/InventoryGUI.gd b/game/ui/bags/InventoryGUI.gd new file mode 100644 index 00000000..35ebef95 --- /dev/null +++ b/game/ui/bags/InventoryGUI.gd @@ -0,0 +1,109 @@ +extends PanelContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var inventory_item_scene : PackedScene +export(NodePath) var inventory_item_container_path : NodePath +export(NodePath) var item_tooltip_path : NodePath +export(Array, NodePath) var inventory_slots : Array + +var _inventory_slots : Array +var _inventory_item_container : Node +var _tooltip : Popup + +var _player : Entity = null +var _bag : Bag = null + +func _ready() -> void: + _inventory_item_container = get_node(inventory_item_container_path) + _tooltip = get_node(item_tooltip_path) + + for np in inventory_slots: + var es : Control = get_node(np) as Control + es.set_tooltip_node(_tooltip) + _inventory_slots.append(es) + + connect("visibility_changed", self, "on_visibility_changed") + +func set_player(p_player: Entity) -> void: + if _player != null: + _player.disconnect("cbag_changed", self, "cbag_changed") + + for ie in _inventory_item_container.get_children(): + ie.queue_free() + + _player = p_player + + _player.connect("cbag_changed", self, "cbag_changed") + + cbag_changed(_player, _player.cbag) + + for np in _inventory_slots: + np.set_player(_player) + + refresh_bags() + +func refresh_bags() -> void: + if _bag == null: + return + + if not visible: + return + +# if _bag.size == _inventory_item_container.get_child_count(): +# return + + for ie in _inventory_item_container.get_children(): + ie.queue_free() + + for i in range(_bag.get_size()): + var n : Node = inventory_item_scene.instance() + + _inventory_item_container.add_child(n) + n.owner = _inventory_item_container + + n.set_slot_id(i) + n.set_tooltip_node(_tooltip) + n.set_player(_player) + n.set_item_instance(_bag.get_item(i)) + +func cbag_changed(entity: Entity, bag: Bag) -> void: + if _bag != null: + _bag.disconnect("size_changed", self, "bag_size_changed") + _bag.disconnect("item_added", self, "bag_item_added") + _bag.disconnect("item_removed", self, "item_removed") + _bag.disconnect("item_swapped", self, "item_swapped") + + _bag = entity.cbag + + if _bag == null: + return + + _bag.connect("size_changed", self, "bag_size_changed") + _bag.connect("item_added", self, "bag_item_added") + _bag.connect("item_count_changed", self, "item_count_changed") + _bag.connect("item_removed", self, "item_removed") + _bag.connect("item_swapped", self, "item_swapped") + +# overburden_removed(bag: Bag) +# overburdened(bag: Bag) + +func bag_size_changed(bag: Bag) -> void: + refresh_bags() + +func bag_item_added(bag: Bag, item: ItemInstance, slot_id: int) -> void: + refresh_bags() + +func item_count_changed(bag: Bag, item: ItemInstance, slot_id: int) -> void: + refresh_bags() + +func item_removed(bag: Bag, item: ItemInstance, slot_id: int) -> void: + refresh_bags() + +func item_swapped(bag: Bag, item1_slot : int, item2_slot: int) -> void: + refresh_bags() + +func on_visibility_changed() -> void: + refresh_bags() diff --git a/game/ui/bags/ItemPupop.gd b/game/ui/bags/ItemPupop.gd new file mode 100644 index 00000000..68f22b7e --- /dev/null +++ b/game/ui/bags/ItemPupop.gd @@ -0,0 +1,19 @@ +extends PopupPanel + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var name_path : NodePath +export(NodePath) var description_path : NodePath + +var _name : RichTextLabel +var _description : RichTextLabel + +func _ready(): + _name = get_node(name_path) as RichTextLabel + _description = get_node(description_path) as RichTextLabel + +func set_item(item : ItemInstance) -> void: + _name.bbcode_text = item.item_template.text_name +# _description.text = item.item_template. diff --git a/game/ui/bags/weapon_set_button_group.tres b/game/ui/bags/weapon_set_button_group.tres new file mode 100644 index 00000000..0e55d740 --- /dev/null +++ b/game/ui/bags/weapon_set_button_group.tres @@ -0,0 +1,3 @@ +[gd_resource type="ButtonGroup" format=2] + +[resource] diff --git a/game/ui/buttons/Buttons.gd b/game/ui/buttons/Buttons.gd new file mode 100644 index 00000000..fc0dd742 --- /dev/null +++ b/game/ui/buttons/Buttons.gd @@ -0,0 +1,47 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var spell_book_path +export (NodePath) var spell_book_button_path +var spell_book +var spell_book_button + +export (NodePath) var lock_button_path +var lock_button + +var player + +func _ready(): + spell_book = get_node(spell_book_path) + spell_book_button = get_node(spell_book_button_path) + + spell_book_button.connect("pressed", self, "_spell_book_click") + + lock_button = get_node(lock_button_path) + lock_button.connect("pressed", self, "_lock_button_click") + +func set_player(p_player): + player = p_player + +func _spell_book_click(): + if spell_book.visible: + spell_book.hide() + else: + spell_book.show() + +func _lock_button_click(): + if player == null: + return + + var cls = player.centity_data + + if cls == null: + return + + var profile = Profiles.get_class_profile(cls.id) + + profile.actionbar_locked = not profile.actionbar_locked + diff --git a/game/ui/castbar/Castbar.gd b/game/ui/castbar/Castbar.gd new file mode 100644 index 00000000..022d093f --- /dev/null +++ b/game/ui/castbar/Castbar.gd @@ -0,0 +1,74 @@ +extends MarginContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var progress_bar_path +export (NodePath) var label_path + +var progress_bar : ProgressBar +var label : Label + +var player : Entity = null +var spell_cast_info : SpellCastInfo = null + +func _ready() -> void: + progress_bar = get_node(progress_bar_path) + progress_bar.min_value = 0 + label = get_node(label_path) + hide() + set_process(false) + +func _process(delta: float) -> void: + if not spell_cast_info.is_casting: + hide() + set_process(false) + + progress_bar.value = spell_cast_info.current_cast_time + + +func set_player(p_player: Entity) -> void: + if not player == null: + player.disconnect("ccast_started", self, "_ccast_started") + player.disconnect("ccast_failed", self, "_ccast_failed") + player.disconnect("ccast_finished", self, "_ccast_finished") + player.disconnect("ccast_interrupted", self, "_ccast_interrupted") + + player = p_player + + player.connect("ccast_started", self, "_ccast_started") + player.connect("ccast_failed", self, "_ccast_failed") + player.connect("ccast_finished", self, "_ccast_finished") + player.connect("ccast_interrupted", self, "_ccast_interrupted") + + +func _ccast_started(pspell_cast_info: SpellCastInfo) -> void: + set_process(true) + + + spell_cast_info = pspell_cast_info + + label.text = spell_cast_info.spell.get_name() + + progress_bar.value = spell_cast_info.current_cast_time + progress_bar.max_value = spell_cast_info.cast_time + + show() + + +func _ccast_failed(pspell_cast_info: SpellCastInfo) -> void: + set_process(false) + hide() + +func _ccast_finished(pspell_cast_info: SpellCastInfo) -> void: + set_process(false) + hide() + +func _ccast_interrupted(pspell_cast_info: SpellCastInfo) -> void: + set_process(false) + hide() + + + + diff --git a/game/ui/castbar/Castbar.tscn b/game/ui/castbar/Castbar.tscn new file mode 100644 index 00000000..101a17d8 --- /dev/null +++ b/game/ui/castbar/Castbar.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/castbar/Castbar.gd" type="Script" id=1] + +[node name="Castbar" type="MarginContainer"] +margin_left = 339.0 +margin_top = 416.0 +margin_right = 691.0 +margin_bottom = 441.0 +script = ExtResource( 1 ) +progress_bar_path = NodePath("ProgressBar") +label_path = NodePath("Label") + +[node name="ProgressBar" type="ProgressBar" parent="."] +margin_right = 352.0 +margin_bottom = 25.0 + +[node name="Label" type="Label" parent="."] +margin_right = 352.0 +margin_bottom = 25.0 +align = 1 +valign = 1 diff --git a/game/ui/crafting/ItemEntry.gd b/game/ui/crafting/ItemEntry.gd new file mode 100644 index 00000000..b5957678 --- /dev/null +++ b/game/ui/crafting/ItemEntry.gd @@ -0,0 +1,31 @@ +extends PanelContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var icon_path : NodePath +export(NodePath) var label_path : NodePath + +var _icon : TextureRect +var _label : Label + +var _entity : Entity +var _crh : CraftRecipeHelper + +func _ready(): + _icon = get_node(icon_path) as TextureRect + _label = get_node(label_path) as Label + +func set_item(entity: Entity, crh: CraftRecipeHelper) -> void: + _entity = entity + _crh = crh + + refresh() + +func refresh() -> void: + if _crh.item == null: + return + + _icon.texture = _crh.item.icon + _label.text = _crh.item.text_name + " (" + str(_crh.count) + ")" diff --git a/game/ui/crafting/ItemEntry.tscn b/game/ui/crafting/ItemEntry.tscn new file mode 100644 index 00000000..3b9026da --- /dev/null +++ b/game/ui/crafting/ItemEntry.tscn @@ -0,0 +1,45 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/crafting/ItemEntry.gd" type="Script" id=1] + +[node name="ItemEntry" type="PanelContainer"] +margin_right = 695.0 +margin_bottom = 60.0 +rect_min_size = Vector2( 100, 60 ) +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +icon_path = NodePath("HBoxContainer/PanelContainer/TextureRect") +label_path = NodePath("HBoxContainer/Label") + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +margin_left = 14.0 +margin_top = 14.0 +margin_right = 681.0 +margin_bottom = 64.0 + +[node name="PanelContainer" type="PanelContainer" parent="HBoxContainer"] +margin_right = 50.0 +margin_bottom = 50.0 +rect_min_size = Vector2( 50, 50 ) + +[node name="TextureRect" type="TextureRect" parent="HBoxContainer/PanelContainer"] +margin_left = 14.0 +margin_top = 14.0 +margin_right = 36.0 +margin_bottom = 36.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true + +[node name="Label" type="Label" parent="HBoxContainer"] +margin_left = 58.0 +margin_top = 12.0 +margin_right = 667.0 +margin_bottom = 37.0 +size_flags_horizontal = 3 +text = "Spanner" +align = 1 diff --git a/game/ui/crafting/RecipeSelector.gd b/game/ui/crafting/RecipeSelector.gd new file mode 100644 index 00000000..c920db91 --- /dev/null +++ b/game/ui/crafting/RecipeSelector.gd @@ -0,0 +1,17 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +var _recipe : CraftRecipe +var _crafting_window : Node + +func set_recipe(recipe : CraftRecipe, crafting_window : Node) -> void: + _recipe = recipe + _crafting_window = crafting_window + + text = recipe.item.item.text_name + +func _pressed(): + _crafting_window.select_recipe(_recipe) diff --git a/game/ui/crafting/RecipeSelector.tscn b/game/ui/crafting/RecipeSelector.tscn new file mode 100644 index 00000000..575485ac --- /dev/null +++ b/game/ui/crafting/RecipeSelector.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/crafting/RecipeSelector.gd" type="Script" id=1] + +[node name="RecipeSelector" type="Button"] +margin_right = 303.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 0, 40 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/debug/DebugInfo.gd b/game/ui/debug/DebugInfo.gd new file mode 100644 index 00000000..52655a06 --- /dev/null +++ b/game/ui/debug/DebugInfo.gd @@ -0,0 +1,61 @@ +extends Label + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +func _ready(): + Settings.connect("setting_changed", self, "setting_changed") + + if visible: + set_process(true) + else: + set_process(false) + +func _exit_tree(): + if Settings != null: + Settings.disconnect("setting_changed", self, "setting_changed") + +func setting_changed(section, key, value): + if section == "debug" and key == "debug_info": + if value: + show() + set_process(true) + else: + hide() + set_process(false) + +func _process(delta): + var a : String = "Fps: " + str(Performance.get_monitor(Performance.TIME_FPS)) + "\n" +# a += "time_process: " + str(Performance.get_monitor(Performance.TIME_PROCESS)) + "\n" +# a += "time_physics_process: " + str(Performance.get_monitor(Performance.TIME_PHYSICS_PROCESS)) + "\n" + a += "mem_static: " + str(Performance.get_monitor(Performance.MEMORY_STATIC)) + "\n" + a += "mem_dynamic: " + str(Performance.get_monitor(Performance.MEMORY_DYNAMIC)) + "\n" +# a += "mem_static_max: " + str(Performance.get_monitor(Performance.MEMORY_STATIC_MAX)) + "\n" +# a += "mem_dyn_max: " + str(Performance.get_monitor(Performance.MEMORY_DYNAMIC_MAX)) + "\n" +# a += "mem_msg_buf_max: " + str(Performance.get_monitor(Performance.MEMORY_MESSAGE_BUFFER_MAX)) + "\n" + a += "obj_count: " + str(Performance.get_monitor(Performance.OBJECT_COUNT)) + "\n" + a += "obj_res_count: " + str(Performance.get_monitor(Performance.OBJECT_RESOURCE_COUNT)) + "\n" + a += "obj_mode_count: " + str(Performance.get_monitor(Performance.OBJECT_NODE_COUNT)) + "\n" + a += "obj_orphan_mode_count: " + str(Performance.get_monitor(Performance.OBJECT_ORPHAN_NODE_COUNT)) + "\n" + a += "obj_in_frame: " + str(Performance.get_monitor(Performance.RENDER_OBJECTS_IN_FRAME)) + "\n" + a += "vert_in_frame: " + str(Performance.get_monitor(Performance.RENDER_VERTICES_IN_FRAME)) + "\n" + a += "mat_changes: " + str(Performance.get_monitor(Performance.RENDER_MATERIAL_CHANGES_IN_FRAME)) + "\n" + a += "shader_changes: " + str(Performance.get_monitor(Performance.RENDER_SHADER_CHANGES_IN_FRAME)) + "\n" + a += "surface_changes: " + str(Performance.get_monitor(Performance.RENDER_SURFACE_CHANGES_IN_FRAME)) + "\n" + a += "draw_calls: " + str(Performance.get_monitor(Performance.RENDER_DRAW_CALLS_IN_FRAME)) + "\n" + a += "vid_mem_used: " + str(Performance.get_monitor(Performance.RENDER_VIDEO_MEM_USED)) + "\n" +# a += "texture_mem_used: " + str(Performance.get_monitor(Performance.RENDER_TEXTURE_MEM_USED)) + "\n" +# a += "vertex_mem_used: " + str(Performance.get_monitor(Performance.RENDER_VERTEX_MEM_USED)) + "\n" +# a += "vid_mem_total: " + str(Performance.get_monitor(Performance.RENDER_USAGE_VIDEO_MEM_TOTAL)) + "\n" + +# a += "phys_2d_active_obj: " + str(Performance.get_monitor(Performance.PHYSICS_2D_ACTIVE_OBJECTS)) + "\n" +# a += "phys_2d_coll_pairs: " + str(Performance.get_monitor(Performance.PHYSICS_2D_COLLISION_PAIRS)) + "\n" +# a += "phys_2d_island_count: " + str(Performance.get_monitor(Performance.PHYSICS_2D_ISLAND_COUNT)) + "\n" +# a += "phys_3d_active_obj: " + str(Performance.get_monitor(Performance.PHYSICS_3D_ACTIVE_OBJECTS)) + "\n" +# a += "phys_3d_coll_pairs: " + str(Performance.get_monitor(Performance.PHYSICS_3D_COLLISION_PAIRS)) + "\n" +# a += "phys_3d_island_count: " + str(Performance.get_monitor(Performance.PHYSICS_3D_ISLAND_COUNT)) + "\n" +# a += "audio_output_latency: " + str(Performance.get_monitor(Performance.AUDIO_OUTPUT_LATENCY)) + "\n" + + text = a + diff --git a/game/ui/debug/DebugInfo.tscn b/game/ui/debug/DebugInfo.tscn new file mode 100644 index 00000000..dd8d0f10 --- /dev/null +++ b/game/ui/debug/DebugInfo.tscn @@ -0,0 +1,18 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/debug/DebugInfo.gd" type="Script" id=1] +[ext_resource path="res://ui/debug/debuginfo_font.tres" type="DynamicFont" id=2] + +[node name="DebugInfo" type="CanvasLayer"] +layer = 3 + +[node name="DebugInfo" type="Label" parent="."] +visible = false +anchor_bottom = 1.0 +margin_right = 301.0 +custom_fonts/font = ExtResource( 2 ) +valign = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/debug/SpawnPointSimpleUI.tscn b/game/ui/debug/SpawnPointSimpleUI.tscn new file mode 100644 index 00000000..79d066da --- /dev/null +++ b/game/ui/debug/SpawnPointSimpleUI.tscn @@ -0,0 +1,101 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://networking/SpawnPoint.gd" type="Script" id=2] + + +[node name="SpawnPoint" type="Spatial"] +script = ExtResource( 2 ) +multi_player = true +gui_path = NodePath("PanelContainer") +host_button_path = NodePath("PanelContainer/VBoxContainer/host") +address_line_edit_path = NodePath("PanelContainer/VBoxContainer/VBoxContainer/address") +port_line_edit_path = NodePath("PanelContainer/VBoxContainer/VBoxContainer/port") +connect_button_path = NodePath("PanelContainer/VBoxContainer/VBoxContainer/connect") +naturalist_button_path = NodePath("PanelContainer/VBoxContainer/select naturalist") +terrarin_path = NodePath("..") + +[node name="PanelContainer" type="PanelContainer" parent="."] +visible = false +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -126.0 +margin_top = -169.5 +margin_right = 126.0 +margin_bottom = 169.5 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 248.0 +margin_bottom = 335.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/separation = 35 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer"] +margin_right = 244.0 +margin_bottom = 140.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 4.0 + +[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/VBoxContainer"] +margin_right = 244.0 +margin_bottom = 15.0 +text = "Ip:" + +[node name="address" type="LineEdit" parent="PanelContainer/VBoxContainer/VBoxContainer"] +margin_top = 23.0 +margin_right = 244.0 +margin_bottom = 47.3413 +placeholder_text = "127.0.0.1" + +[node name="Label2" type="Label" parent="PanelContainer/VBoxContainer/VBoxContainer"] +margin_top = 55.0 +margin_right = 244.0 +margin_bottom = 70.0 +text = "Port:" + +[node name="port" type="LineEdit" parent="PanelContainer/VBoxContainer/VBoxContainer"] +margin_top = 78.0 +margin_right = 244.0 +margin_bottom = 102.341 +placeholder_text = "23223" + +[node name="connect" type="Button" parent="PanelContainer/VBoxContainer/VBoxContainer"] +margin_top = 110.0 +margin_right = 244.0 +margin_bottom = 140.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Connect" + +[node name="host" type="Button" parent="PanelContainer/VBoxContainer"] +margin_top = 175.0 +margin_right = 244.0 +margin_bottom = 210.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Host" + +[node name="Label" type="Label" parent="PanelContainer/VBoxContainer"] +margin_top = 245.0 +margin_right = 244.0 +margin_bottom = 260.0 +size_flags_vertical = 1 +text = "Class: (Just select for offline play):" + +[node name="select naturalist" type="Button" parent="PanelContainer/VBoxContainer"] +margin_top = 295.0 +margin_right = 244.0 +margin_bottom = 331.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Naturalist" diff --git a/game/ui/debug/debuginfo_font.tres b/game/ui/debug/debuginfo_font.tres new file mode 100644 index 00000000..550e47a8 --- /dev/null +++ b/game/ui/debug/debuginfo_font.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://data/fonts/VT323-Regular.ttf" type="DynamicFontData" id=1] + +[resource] +size = 11 +font_data = ExtResource( 1 ) diff --git a/game/ui/errorframe/ErrorFrame.tscn b/game/ui/errorframe/ErrorFrame.tscn new file mode 100644 index 00000000..8d3da0f3 --- /dev/null +++ b/game/ui/errorframe/ErrorFrame.tscn @@ -0,0 +1,5 @@ +[gd_scene format=2] + +[node name="ErrorFrame" type="MarginContainer"] +margin_right = 40.0 +margin_bottom = 40.0 diff --git a/game/ui/ingame_menu/ExitButton.gd b/game/ui/ingame_menu/ExitButton.gd new file mode 100644 index 00000000..8cdbb07f --- /dev/null +++ b/game/ui/ingame_menu/ExitButton.gd @@ -0,0 +1,12 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + + +func _ready(): + connect("pressed", self, "on_click") + +func on_click() -> void: + get_node("/root/Main").switch_scene(Main.StartSceneTypes.MENU) diff --git a/game/ui/ingame_menu/IngameMenu.tscn b/game/ui/ingame_menu/IngameMenu.tscn new file mode 100644 index 00000000..bae325c7 --- /dev/null +++ b/game/ui/ingame_menu/IngameMenu.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://ui/options/Options.tscn" type="PackedScene" id=2] +[ext_resource path="res://ui/ingame_menu/ExitButton.gd" type="Script" id=3] +[ext_resource path="res://ui/keybinds/Keybinds.tscn" type="PackedScene" id=4] + +[node name="IngameMenu" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Menu" type="PanelContainer" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -77.0 +margin_top = -51.0 +margin_right = 78.0 +margin_bottom = 51.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="Menu"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 151.0 +margin_bottom = 132.0 + +[node name="Resume" type="Button" parent="Menu/VBoxContainer"] +margin_right = 147.0 +margin_bottom = 26.269 +text = "Resume" + +[node name="Keybinds" type="Button" parent="Menu/VBoxContainer"] +margin_top = 34.0 +margin_right = 147.0 +margin_bottom = 60.269 +text = "Keybinds" + +[node name="Options" type="Button" parent="Menu/VBoxContainer"] +margin_top = 68.0 +margin_right = 147.0 +margin_bottom = 94.269 +text = "Options" + +[node name="Exit" type="Button" parent="Menu/VBoxContainer"] +margin_top = 102.0 +margin_right = 147.0 +margin_bottom = 128.269 +text = "Exit" +script = ExtResource( 3 ) + +[node name="Options" parent="." instance=ExtResource( 2 )] +visible = false +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -307.0 +margin_top = -220.0 +margin_right = 307.0 +margin_bottom = 220.0 + +[node name="KeybindWindow" parent="." instance=ExtResource( 4 )] +visible = false +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -426.0 +margin_top = -270.0 +margin_right = 426.0 +margin_bottom = 270.0 +[connection signal="pressed" from="Menu/VBoxContainer/Resume" to="." method="hide"] +[connection signal="pressed" from="Menu/VBoxContainer/Keybinds" to="KeybindWindow" method="show"] +[connection signal="pressed" from="Menu/VBoxContainer/Options" to="Options" method="show"] diff --git a/game/ui/keybinds/KeybindCategory.gd b/game/ui/keybinds/KeybindCategory.gd new file mode 100644 index 00000000..9a7d848a --- /dev/null +++ b/game/ui/keybinds/KeybindCategory.gd @@ -0,0 +1,9 @@ +extends VBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var keybind_entry_scene : PackedScene + +export(NodePath) var content_container_path : NodePath diff --git a/game/ui/keybinds/KeybindCategory.tscn b/game/ui/keybinds/KeybindCategory.tscn new file mode 100644 index 00000000..f66ca13c --- /dev/null +++ b/game/ui/keybinds/KeybindCategory.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/keybinds/KeybindCategory.gd" type="Script" id=1] +[ext_resource path="res://ui/keybinds/KeybindEntry.tscn" type="PackedScene" id=2] + +[node name="KeybindCategory" type="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 23.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +keybind_entry_scene = ExtResource( 2 ) +content_container_path = NodePath("VBoxContainer/content") + +[node name="Label" type="Label" parent="."] +margin_right = 1016.0 +margin_bottom = 25.0 +text = "Category" + +[node name="VBoxContainer" type="MarginContainer" parent="."] +margin_top = 33.0 +margin_right = 1016.0 +margin_bottom = 33.0 +custom_constants/margin_left = 20 + +[node name="content" type="VBoxContainer" parent="VBoxContainer"] +margin_left = 20.0 +margin_right = 1016.0 diff --git a/game/ui/keybinds/KeybindEntry.gd b/game/ui/keybinds/KeybindEntry.gd new file mode 100644 index 00000000..6d609e95 --- /dev/null +++ b/game/ui/keybinds/KeybindEntry.gd @@ -0,0 +1,23 @@ +extends HBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + +func query_keybind_1() -> void: + pass + +func query_keybind_2() -> void: + pass diff --git a/game/ui/keybinds/KeybindEntry.tscn b/game/ui/keybinds/KeybindEntry.tscn new file mode 100644 index 00000000..9da6f5df --- /dev/null +++ b/game/ui/keybinds/KeybindEntry.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/keybinds/KeybindEntry.gd" type="Script" id=1] + +[node name="KeybindEntry" type="HBoxContainer"] +margin_right = 996.0 +margin_bottom = 37.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label" type="Label" parent="."] +margin_top = 6.0 +margin_right = 580.0 +margin_bottom = 31.0 +size_flags_horizontal = 3 +text = "Keybind" + +[node name="Button" type="Button" parent="."] +margin_left = 588.0 +margin_right = 788.0 +margin_bottom = 37.0 +rect_min_size = Vector2( 200, 30 ) +text = "empty" + +[node name="Button2" type="Button" parent="."] +margin_left = 796.0 +margin_right = 996.0 +margin_bottom = 37.0 +rect_min_size = Vector2( 200, 30 ) +text = "empty" +[connection signal="pressed" from="Button" to="." method="query_keybind_1"] +[connection signal="pressed" from="Button2" to="." method="query_keybind_2"] diff --git a/game/ui/keybinds/Keybinds.gd b/game/ui/keybinds/Keybinds.gd new file mode 100644 index 00000000..94cd0cfd --- /dev/null +++ b/game/ui/keybinds/Keybinds.gd @@ -0,0 +1,113 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var keybind_category_scene : PackedScene + +export(NodePath) var content_container_path : NodePath + + +# Note for the reader: +# +# This demo conveniently uses the same names for actions and for the container nodes +# that hold each remapping button. This allow to get back to the button based simply +# on the name of the corresponding action, but it might not be so simple in your project. +# +# A better approach for large-scale input remapping might be to do the connections between +# buttons and wait_for_input through the code, passing as arguments both the name of the +# action and the node, e.g.: +# button.connect("pressed", self, "wait_for_input", [ button, action ]) + +# Constants +const INPUT_ACTIONS = [ "move_up", "move_down", "move_left", "move_right", "jump" ] +const CONFIG_FILE = "user://input.cfg" + +# Member variables +var action # To register the action the UI is currently handling +var button # Button node corresponding to the above action + + +# Load/save input mapping to a config file +# Changes done while testing the demo will be persistent, saved to CONFIG_FILE + +func load_config(): + var config = ConfigFile.new() + var err = config.load(CONFIG_FILE) + if err: # Assuming that file is missing, generate default config + for action_name in INPUT_ACTIONS: + var action_list = InputMap.get_action_list(action_name) + # There could be multiple actions in the list, but we save the first one by default + var scancode = OS.get_scancode_string(action_list[0].scancode) + config.set_value("input", action_name, scancode) + config.save(CONFIG_FILE) + else: # ConfigFile was properly loaded, initialize InputMap + for action_name in config.get_section_keys("input"): + # Get the key scancode corresponding to the saved human-readable string + var scancode = OS.find_scancode_from_string(config.get_value("input", action_name)) + # Create a new event object based on the saved scancode + var event = InputEventKey.new() + event.scancode = scancode + # Replace old action (key) events by the new one + for old_event in InputMap.get_action_list(action_name): + if old_event is InputEventKey: + InputMap.action_erase_event(action_name, old_event) + InputMap.action_add_event(action_name, event) + + +func save_to_config(section, key, value): + """Helper function to redefine a parameter in the settings file""" + var config = ConfigFile.new() + var err = config.load(CONFIG_FILE) + if err: + print("Error code when loading config file: ", err) + else: + config.set_value(section, key, value) + config.save(CONFIG_FILE) + + +# Input management + +func wait_for_input(action_bind): + action = action_bind + # See note at the beginning of the script + button = get_node("bindings").get_node(action).get_node("Button") + get_node("contextual_help").text = "Press a key to assign to the '" + action + "' action." + set_process_input(true) + + +func a_input(event): + # Handle the first pressed key + if event is InputEventKey: + # Register the event as handled and stop polling + get_tree().set_input_as_handled() + set_process_input(false) + # Reinitialise the contextual help label + get_node("contextual_help").text = "Click a key binding to reassign it, or press the Cancel action." + if not event.is_action("ui_cancel"): + # Display the string corresponding to the pressed key + var scancode = OS.get_scancode_string(event.scancode) + button.text = scancode + # Start by removing previously key binding(s) + for old_event in InputMap.get_action_list(action): + InputMap.action_erase_event(action, old_event) + # Add the new key binding + InputMap.action_add_event(action, event) + save_to_config("input", action, scancode) + + +func a_ready(): + # Load config if existing, if not it will be generated with default values + load_config() + # Initialise each button with the default key binding from InputMap + for action in INPUT_ACTIONS: + # We assume that the key binding that we want is the first one (0), if there are several + var input_event = InputMap.get_action_list(action)[0] + # See note at the beginning of the script + var button = get_node("bindings").get_node(action).get_node("Button") + button.text = OS.get_scancode_string(input_event.scancode) + button.connect("pressed", self, "wait_for_input", [action]) + + # Do not start processing input until a button is pressed + set_process_input(false) diff --git a/game/ui/keybinds/Keybinds.tscn b/game/ui/keybinds/Keybinds.tscn new file mode 100644 index 00000000..e6ba8334 --- /dev/null +++ b/game/ui/keybinds/Keybinds.tscn @@ -0,0 +1,73 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://ui/keybinds/Keybinds.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=2] +[ext_resource path="res://ui/keybinds/KeybindCategory.tscn" type="PackedScene" id=3] + +[node name="KeybindWindow" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 2 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +keybind_category_scene = ExtResource( 3 ) +content_container_path = NodePath("VBoxContainer/ScrollContainer/Content") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 30.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 7.0 +margin_right = 968.0 +margin_bottom = 22.0 +size_flags_horizontal = 3 +text = "Keybinds" + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 976.0 +margin_right = 1016.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 40, 30 ) +text = "X" + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +margin_top = 38.0 +margin_right = 1016.0 +margin_bottom = 554.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +scroll_horizontal_enabled = false + +[node name="Content" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"] +margin_right = 1016.0 +size_flags_horizontal = 3 + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 562.0 +margin_right = 1016.0 +margin_bottom = 592.0 +alignment = 2 + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer2"] +margin_left = 848.0 +margin_right = 928.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 80, 30 ) +text = "Cancel" + +[node name="Button2" type="Button" parent="VBoxContainer/HBoxContainer2"] +margin_left = 936.0 +margin_right = 1016.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 80, 30 ) +text = "OK" +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="hide"] diff --git a/game/ui/login/Login.tscn b/game/ui/login/Login.tscn new file mode 100644 index 00000000..5e0270fd --- /dev/null +++ b/game/ui/login/Login.tscn @@ -0,0 +1,88 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] + +[node name="Login" type="PanelContainer"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -145.0 +margin_top = -157.0 +margin_right = 110.0 +margin_bottom = 86.0 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 251.0 +margin_bottom = 242.0 +custom_constants/separation = 10 +alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 247.0 +margin_bottom = 30.0 +size_flags_horizontal = 3 + +[node name="Label3" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 7.0 +margin_right = 199.0 +margin_bottom = 22.0 +size_flags_horizontal = 3 +text = "Login" + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 207.0 +margin_right = 247.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 40, 30 ) +text = "X" + +[node name="HSeparator" type="HSeparator" parent="VBoxContainer"] +margin_top = 40.0 +margin_right = 247.0 +margin_bottom = 48.0 + +[node name="Label" type="Label" parent="VBoxContainer"] +margin_top = 58.0 +margin_right = 247.0 +margin_bottom = 73.0 +text = "Username" + +[node name="LineEdit" type="LineEdit" parent="VBoxContainer"] +margin_top = 83.0 +margin_right = 247.0 +margin_bottom = 107.341 + +[node name="Label2" type="Label" parent="VBoxContainer"] +margin_top = 117.0 +margin_right = 247.0 +margin_bottom = 132.0 +text = "Password" + +[node name="LineEdit2" type="LineEdit" parent="VBoxContainer"] +margin_top = 142.0 +margin_right = 247.0 +margin_bottom = 166.341 +secret = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CheckBox" type="CheckBox" parent="VBoxContainer"] +margin_top = 176.0 +margin_right = 247.0 +margin_bottom = 202.269 +text = "Remember me" + +[node name="Button" type="Button" parent="VBoxContainer"] +margin_top = 212.0 +margin_right = 247.0 +margin_bottom = 238.269 +text = "Login" +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="hide"] diff --git a/game/ui/loot_window/LootEntry.gd b/game/ui/loot_window/LootEntry.gd new file mode 100644 index 00000000..208f1688 --- /dev/null +++ b/game/ui/loot_window/LootEntry.gd @@ -0,0 +1,33 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var icon_path : NodePath +export(NodePath) var label_path : NodePath + +var icon : TextureRect +var label : RichTextLabel + +var index : int +var player : Entity +var item : ItemInstance + +func _ready(): + icon = get_node(icon_path) as TextureRect + label = get_node(label_path) as RichTextLabel + + if icon == null or label == null: + Logger.error("LootEntry is not setup correctly!") + +func on_click(): + player.crequest_loot(index) + +func set_item(pindex : int, item_instance : ItemInstance, pplayer : Entity) -> void: + index = index + player = pplayer + item = item_instance + + icon.texture = item.item_template.icon + label.bbcode_text = item.item_template.text_name diff --git a/game/ui/loot_window/LootEntry.tscn b/game/ui/loot_window/LootEntry.tscn new file mode 100644 index 00000000..cd3a857e --- /dev/null +++ b/game/ui/loot_window/LootEntry.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/loot_window/LootEntry.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=2] + +[node name="lootEntry" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_right = -3.0 +margin_bottom = -3.0 +rect_min_size = Vector2( 0, 40 ) +size_flags_horizontal = 3 +theme = ExtResource( 2 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +icon_path = NodePath("HBoxContainer/Button/TextureRect") +label_path = NodePath("HBoxContainer/Label") + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1017.0 +margin_bottom = 593.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Button" type="Button" parent="HBoxContainer"] +margin_right = 46.0 +margin_bottom = 589.0 +rect_min_size = Vector2( 46, 46 ) + +[node name="TextureRect" type="TextureRect" parent="HBoxContainer/Button"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -20.0 +margin_top = -20.0 +margin_right = 20.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 40, 40 ) +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label" type="RichTextLabel" parent="HBoxContainer"] +margin_left = 50.0 +margin_right = 1013.0 +margin_bottom = 589.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +bbcode_enabled = true +text = "sdfsdfsdf" +scroll_active = false +[connection signal="pressed" from="HBoxContainer/Button" to="." method="on_click"] diff --git a/game/ui/loot_window/LootWindow.gd b/game/ui/loot_window/LootWindow.gd new file mode 100644 index 00000000..a5361ab3 --- /dev/null +++ b/game/ui/loot_window/LootWindow.gd @@ -0,0 +1,66 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var entry_scene : PackedScene +export(NodePath) var container_path : NodePath + +var container : Node + +var player : Entity +var target_bag : Bag + +func _ready(): + container = get_node(container_path) + + connect("visibility_changed", self, "on_visibility_changed") + + if entry_scene == null: + Logger.error("LootWindow: entry_scene is null") + +func refresh(): + for child in container.get_children(): + child.queue_free() + + if target_bag == null: + return + + for i in range(target_bag.get_size()): + var ii : ItemInstance = target_bag.get_item(i) + + if ii: + var e : Node = entry_scene.instance() + + container.add_child(e) + e.owner = container + + e.set_item(i, ii, player) + +func set_player(p_player : Entity) -> void: + player = p_player + player.connect("ctarget_bag_changed", self, "ctarget_bag_changed") + +func on_visibility_changed(): + if visible: + refresh() + else: + target_bag.disconnect("item_removed", self, "on_item_removed") + target_bag = null + +func on_item_removed(bag: Bag, item: ItemInstance, slot_id: int) -> void: + refresh() + +func ctarget_bag_changed(entity: Entity, bag: Bag) -> void: + if target_bag != null: + target_bag.disconnect("item_removed", self, "on_item_removed") + target_bag = null + + target_bag = bag + + if target_bag == null: + return + + target_bag.connect("item_removed", self, "on_item_removed") + diff --git a/game/ui/loot_window/LootWindow.tscn b/game/ui/loot_window/LootWindow.tscn new file mode 100644 index 00000000..5aa5eb58 --- /dev/null +++ b/game/ui/loot_window/LootWindow.tscn @@ -0,0 +1,50 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://ui/loot_window/LootWindow.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=2] +[ext_resource path="res://ui/loot_window/LootEntry.tscn" type="PackedScene" id=3] + +[node name="LootWindow" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +theme = ExtResource( 2 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +entry_scene = ExtResource( 3 ) +container_path = NodePath("VBoxContainer/ScrollContainer/container") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Label" type="Label" parent="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 15.0 +text = "Loot" +align = 1 +valign = 1 + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +margin_top = 23.0 +margin_right = 1016.0 +margin_bottom = 558.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="container" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"] +margin_right = 1016.0 +size_flags_horizontal = 3 + +[node name="Button" type="Button" parent="VBoxContainer"] +margin_top = 566.0 +margin_right = 1016.0 +margin_bottom = 592.269 +text = "close" +[connection signal="pressed" from="VBoxContainer/Button" to="." method="hide"] diff --git a/game/ui/map/Map.tscn b/game/ui/map/Map.tscn new file mode 100644 index 00000000..40678324 --- /dev/null +++ b/game/ui/map/Map.tscn @@ -0,0 +1,47 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] + +[node name="Map" type="PanelContainer"] +margin_left = 55.5336 +margin_top = 55.5336 +margin_right = 821.534 +margin_bottom = 545.534 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 762.0 +margin_bottom = 486.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 758.0 +margin_bottom = 40.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 12.0 +margin_right = 710.0 +margin_bottom = 27.0 +size_flags_horizontal = 3 +text = "Map" + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 718.0 +margin_right = 758.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 40, 40 ) +text = "X" + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +margin_top = 48.0 +margin_right = 758.0 +margin_bottom = 482.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/ScrollContainer"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="hide"] diff --git a/game/ui/minimap/MiniMap.tscn b/game/ui/minimap/MiniMap.tscn new file mode 100644 index 00000000..b9cf302b --- /dev/null +++ b/game/ui/minimap/MiniMap.tscn @@ -0,0 +1,11 @@ +[gd_scene format=2] + +[node name="MiniMap" type="MarginContainer"] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -196.0 +margin_bottom = 189.0 +mouse_filter = 2 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/nameplates/NamePlate.tscn b/game/ui/nameplates/NamePlate.tscn new file mode 100644 index 00000000..e62c202b --- /dev/null +++ b/game/ui/nameplates/NamePlate.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://ui/nameplates/name_plate_theme.tres" type="Theme" id=1] +[ext_resource path="res://ui/nameplates/texture_progress_fg.tres" type="Texture" id=2] +[ext_resource path="res://player/NamePlate.gd" type="Script" id=3] + +[node name="NamePlate" type="VBoxContainer"] +margin_right = 62.0 +margin_bottom = 17.0 +rect_scale = Vector2( 0.75, 0.75 ) +mouse_filter = 2 +theme = ExtResource( 1 ) +custom_constants/separation = 0 +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} +health_bar_path = NodePath("MarginContainer/TextureProgress") +health_bar_label_path = NodePath("MarginContainer/CenterContainer/Label") +normal_color = Color( 0.74902, 0.74902, 0.74902, 1 ) +mouseover_scale = Vector2( 0.75, 0.75 ) + +[node name="Name" type="Label" parent="."] +margin_right = 62.0 +margin_bottom = 15.0 +custom_constants/line_spacing = 0 +text = "Asda" +align = 1 +valign = 1 + +[node name="MarginContainer" type="MarginContainer" parent="."] +margin_top = 15.0 +margin_right = 62.0 +margin_bottom = 17.0 +size_flags_horizontal = 15 +size_flags_vertical = 15 +size_flags_stretch_ratio = 2.3 + +[node name="TextureProgress" type="TextureProgress" parent="MarginContainer"] +margin_right = 62.0 +margin_bottom = 2.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +value = 50.0 +texture_under = ExtResource( 2 ) +texture_progress = ExtResource( 2 ) +tint_under = Color( 0.219608, 0.215686, 0.215686, 0.756863 ) +tint_progress = Color( 0.917647, 0.0117647, 0.0117647, 1 ) +nine_patch_stretch = true +stretch_margin_left = 1 +stretch_margin_top = 1 +stretch_margin_right = 1 +stretch_margin_bottom = 1 + +[node name="CenterContainer" type="CenterContainer" parent="MarginContainer"] +visible = false +margin_right = 62.0 +margin_bottom = 2.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Label" type="Label" parent="MarginContainer/CenterContainer"] +visible = false +margin_left = 22.0 +margin_top = -7.0 +margin_right = 40.0 +margin_bottom = 8.0 +text = "50%" diff --git a/game/ui/nameplates/name_plate_dynamicfont.tres b/game/ui/nameplates/name_plate_dynamicfont.tres new file mode 100644 index 00000000..d3f2869b --- /dev/null +++ b/game/ui/nameplates/name_plate_dynamicfont.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://data/fonts/VT323-Regular.ttf" type="DynamicFontData" id=1] + +[resource] +size = 14 +font_data = ExtResource( 1 ) diff --git a/game/ui/nameplates/name_plate_theme.tres b/game/ui/nameplates/name_plate_theme.tres new file mode 100644 index 00000000..83e58955 --- /dev/null +++ b/game/ui/nameplates/name_plate_theme.tres @@ -0,0 +1,36 @@ +[gd_resource type="Theme" load_steps=4 format=2] + +[ext_resource path="res://ui/nameplates/name_plate_dynamicfont.tres" type="DynamicFont" id=1] + +[sub_resource type="StyleBoxFlat" id=1] +bg_color = Color( 0.0627451, 0.0627451, 0.0627451, 0.823529 ) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 +anti_aliasing = false + +[sub_resource type="StyleBoxFlat" id=2] +bg_color = Color( 0.647059, 0, 0, 1 ) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 +anti_aliasing = false + +[resource] +default_font = ExtResource( 1 ) +Label/colors/font_color = Color( 1, 1, 1, 1 ) +Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +Label/colors/font_outline_modulate = Color( 1, 1, 1, 1 ) +Label/constants/line_spacing = 6 +Label/constants/shadow_as_outline = 0 +Label/constants/shadow_offset_x = 0 +Label/constants/shadow_offset_y = 0 +Label/fonts/font = null +Label/styles/normal = null +ProgressBar/colors/font_color = Color( 0.94, 0.94, 0.94, 1 ) +ProgressBar/colors/font_color_shadow = Color( 0, 0, 0, 1 ) +ProgressBar/fonts/font = null +ProgressBar/styles/bg = SubResource( 1 ) +ProgressBar/styles/fg = SubResource( 2 ) diff --git a/game/ui/nameplates/texture_progress_bg.tres b/game/ui/nameplates/texture_progress_bg.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/nameplates/texture_progress_bg.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/nameplates/texture_progress_fg.tres b/game/ui/nameplates/texture_progress_fg.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/nameplates/texture_progress_fg.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/numbers/Number.gd b/game/ui/numbers/Number.gd new file mode 100644 index 00000000..66a36887 --- /dev/null +++ b/game/ui/numbers/Number.gd @@ -0,0 +1,71 @@ +extends Label + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var animation_player_path : NodePath = "AnimationPlayer" + +export(Color) var damage_color : Color = Color.yellow +export(Color) var heal_color : Color = Color.green + +var world_position : Vector3 = Vector3() +var animation_player : AnimationPlayer = null +var camera : Camera = null + +func _ready() -> void: + animation_player = get_node(animation_player_path) as AnimationPlayer + + animation_player.connect("animation_finished", self, "animation_finished") + + set_process(false) + +func _process(delta): + if camera == null: + return + + var cam_pos : Vector3 = camera.global_transform.xform(Vector3()) + var dstv : Vector3 = cam_pos - world_position + dstv.y = 0 +# var dst : float = dstv.length_squared() + + var cam_facing : Vector3 = -camera.global_transform.basis.z + var d : float = cam_facing.dot(dstv) + + if d > 0: + if visible: + hide() + return + else: + if not visible: + show() + + var screen_position : Vector2 = camera.unproject_position(world_position) + var new_pos : Vector2 = Vector2(screen_position.x + rect_position.x, screen_position.y + rect_position.y - 60) + + set_position(new_pos) + + +func damage(pos : Vector3, value : int, crit : bool) -> void: + setup(pos, damage_color, value, crit) + +func heal(pos : Vector3, value : int, crit : bool) -> void: + setup(pos, heal_color, value, crit) + +func setup(pos : Vector3, color : Color, value : int, crit : bool) -> void: + world_position = pos + + camera = get_tree().get_root().get_camera() as Camera + + text = str(value) + add_color_override("font_color", color) + + if crit: + animation_player.play("crit") + else: + animation_player.play("normal") + + set_process(true) + +func animation_finished(anim_name : String) -> void: + queue_free() diff --git a/game/ui/numbers/Number.tscn b/game/ui/numbers/Number.tscn new file mode 100644 index 00000000..c9dc9dd6 --- /dev/null +++ b/game/ui/numbers/Number.tscn @@ -0,0 +1,92 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/numbers/Number.gd" type="Script" id=1] +[ext_resource path="res://ui/numbers/number_font.tres" type="DynamicFont" id=2] + +[sub_resource type="Animation" id=1] +resource_name = "crit" +length = 1.5 +tracks/0/type = "value" +tracks/0/path = NodePath(".:rect_scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.05, 0.3, 1.5 ), +"transitions": PoolRealArray( 1, 0.307786, 1, 1.36604 ), +"update": 0, +"values": [ Vector2( 0.1, 0.1 ), Vector2( 1.5, 1.5 ), Vector2( 1.3, 1.3 ), Vector2( 1.3, 1.3 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath(".:rect_position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.6, 1.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( -50, 20 ), Vector2( -50, 20 ), Vector2( -50, 10 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath(".:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 1.2, 1.5 ), +"transitions": PoolRealArray( 1, 1, 4 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} + +[sub_resource type="Animation" id=2] +resource_name = "normal" +length = 2.0 +tracks/0/type = "value" +tracks/0/path = NodePath(".:rect_position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( -50, 20 ), Vector2( -50, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath(".:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 1.5, 2 ), +"transitions": PoolRealArray( 1, 1, 4 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} + +[node name="Number" type="Label"] +modulate = Color( 1, 1, 1, 0 ) +margin_left = -50.0 +margin_right = 50.0 +margin_bottom = 40.0006 +rect_scale = Vector2( 1.3, 1.3 ) +rect_pivot_offset = Vector2( 50, 20 ) +custom_fonts/font = ExtResource( 2 ) +custom_colors/font_color = Color( 0.870588, 0.898039, 0.0117647, 1 ) +align = 1 +valign = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/crit = SubResource( 1 ) +anims/normal = SubResource( 2 ) diff --git a/game/ui/numbers/number_font.tres b/game/ui/numbers/number_font.tres new file mode 100644 index 00000000..80d30233 --- /dev/null +++ b/game/ui/numbers/number_font.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://data/fonts/VT323-Regular.ttf" type="DynamicFontData" id=1] + +[resource] +size = 12 +font_data = ExtResource( 1 ) diff --git a/game/ui/options/OptionCheckBox.gd b/game/ui/options/OptionCheckBox.gd new file mode 100644 index 00000000..74e795f1 --- /dev/null +++ b/game/ui/options/OptionCheckBox.gd @@ -0,0 +1,17 @@ +extends CheckBox + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(String) var property_category : String +export(String) var property_name : String + +func _ready() -> void: + var p : bool = Settings.get_value(property_category, property_name) as bool + + if p != pressed: + pressed = p + +func _toggled(button_pressed : bool) -> void: + Settings.set_value(property_category, property_name, button_pressed) diff --git a/game/ui/options/OptionRow.gd b/game/ui/options/OptionRow.gd new file mode 100644 index 00000000..da60344c --- /dev/null +++ b/game/ui/options/OptionRow.gd @@ -0,0 +1,9 @@ +extends HBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(String) var property_category : String +export(String) var property_name : String + diff --git a/game/ui/options/Options.tscn b/game/ui/options/Options.tscn new file mode 100644 index 00000000..e3f910fc --- /dev/null +++ b/game/ui/options/Options.tscn @@ -0,0 +1,128 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://ui/player_ui/RemoveProfile.gd" type="Script" id=2] +[ext_resource path="res://ui/options/OptionRow.gd" type="Script" id=3] +[ext_resource path="res://ui/options/Threads.gd" type="Script" id=4] +[ext_resource path="res://ui/options/OptionCheckBox.gd" type="Script" id=5] + +[node name="Options" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="PanelContainer" type="PanelContainer" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -271.5 +margin_top = -236.5 +margin_right = 271.5 +margin_bottom = 236.5 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 539.0 +margin_bottom = 469.0 + +[node name="TabContainer" type="TabContainer" parent="PanelContainer/VBoxContainer"] +margin_right = 535.0 +margin_bottom = 431.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tab_align = 0 + +[node name="Video" type="VBoxContainer" parent="PanelContainer/VBoxContainer/TabContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 4.0 +margin_top = 30.0 +margin_right = -4.0 +margin_bottom = -4.0 +size_flags_horizontal = 3 + +[node name="Threads2" type="HBoxContainer" parent="PanelContainer/VBoxContainer/TabContainer/Video"] +visible = false +margin_right = 519.0 +margin_bottom = 26.0 +size_flags_horizontal = 3 +script = ExtResource( 3 ) +property_category = "rendering/threads" +property_name = "thread_model" + +[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/TabContainer/Video/Threads2"] +margin_top = 5.0 +margin_right = 255.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +text = "asd" + +[node name="Button" type="Button" parent="PanelContainer/VBoxContainer/TabContainer/Video/Threads2"] +margin_left = 263.0 +margin_right = 519.0 +margin_bottom = 26.269 +size_flags_horizontal = 3 +text = "tb" + +[node name="Threads" type="HBoxContainer" parent="PanelContainer/VBoxContainer/TabContainer/Video"] +margin_right = 527.0 +margin_bottom = 26.0 +size_flags_horizontal = 3 +script = ExtResource( 4 ) + +[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/TabContainer/Video/Threads"] +margin_top = 5.0 +margin_right = 259.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +text = "Thread Model" + +[node name="OptionButton" type="OptionButton" parent="PanelContainer/VBoxContainer/TabContainer/Video/Threads"] +margin_left = 267.0 +margin_right = 527.0 +margin_bottom = 26.269 +size_flags_horizontal = 3 +align = 1 +expand_icon = true + +[node name="Debug" type="VBoxContainer" parent="PanelContainer/VBoxContainer/TabContainer"] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 4.0 +margin_top = 30.0 +margin_right = -4.0 +margin_bottom = -4.0 +size_flags_horizontal = 3 + +[node name="DebugInfo" type="CheckBox" parent="PanelContainer/VBoxContainer/TabContainer/Debug"] +margin_right = 527.0 +margin_bottom = 26.269 +text = "Show Debug info" +script = ExtResource( 5 ) +property_category = "debug" +property_name = "debug_info" + +[node name="RemoveProfile" type="Button" parent="PanelContainer/VBoxContainer/TabContainer/Debug"] +margin_top = 34.0 +margin_right = 527.0 +margin_bottom = 60.269 +size_flags_horizontal = 3 +text = "Remove Profile" +script = ExtResource( 2 ) + +[node name="Close" type="Button" parent="PanelContainer/VBoxContainer"] +margin_top = 439.0 +margin_right = 535.0 +margin_bottom = 465.269 +text = "Close" +[connection signal="pressed" from="PanelContainer/VBoxContainer/Close" to="." method="hide"] diff --git a/game/ui/options/Threads.gd b/game/ui/options/Threads.gd new file mode 100644 index 00000000..1a09917f --- /dev/null +++ b/game/ui/options/Threads.gd @@ -0,0 +1,19 @@ +extends HBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +func _ready(): + var ob : OptionButton = $OptionButton as OptionButton + + ob.add_item("Single-Unsafe", 0) + ob.add_item("Single-Safe", 1) + ob.add_item("Multi Threaded", 2) + + ob.selected = Settings.get_value("rendering", "thread_model") + + ob.connect("item_selected", self, "item_selected") + +func item_selected(id : int) -> void: + Settings.set_value("rendering", "thread_model", id) diff --git a/game/ui/player_ui/RemoveProfile.gd b/game/ui/player_ui/RemoveProfile.gd new file mode 100644 index 00000000..fbfe351f --- /dev/null +++ b/game/ui/player_ui/RemoveProfile.gd @@ -0,0 +1,21 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + +# Called when the node enters the scene tree for the first time. +func _ready(): + connect("pressed", self, "_on_pressed") + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + +func _on_pressed(): + var d : Directory = Directory.new() + d.remove("user://profile.save") diff --git a/game/ui/player_ui/player_ui.gd b/game/ui/player_ui/player_ui.gd new file mode 100644 index 00000000..0c7e2323 --- /dev/null +++ b/game/ui/player_ui/player_ui.gd @@ -0,0 +1,15 @@ +extends CanvasLayer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var loot_window_path : NodePath +var loot_window : Control + +func _ready(): + loot_window = get_node(loot_window_path) as Control + +func _on_Player_onc_open_loot_winow_request() -> void: + if loot_window != null: + loot_window.show() diff --git a/game/ui/player_ui/player_ui.tscn b/game/ui/player_ui/player_ui.tscn new file mode 100644 index 00000000..e3812e03 --- /dev/null +++ b/game/ui/player_ui/player_ui.tscn @@ -0,0 +1,429 @@ +[gd_scene load_steps=28 format=2] + +[ext_resource path="res://player/GUI.gd" type="Script" id=1] +[ext_resource path="res://ui/ingame_menu/IngameMenu.tscn" type="PackedScene" id=2] +[ext_resource path="res://player/Unitframes.gd" type="Script" id=3] +[ext_resource path="res://ui/errorframe/ErrorFrame.tscn" type="PackedScene" id=4] +[ext_resource path="res://ui/auraframe/AuraFrame.tscn" type="PackedScene" id=5] +[ext_resource path="res://ui/map/Map.tscn" type="PackedScene" id=6] +[ext_resource path="res://ui/touch_pad/TurnPanel.gd" type="Script" id=7] +[ext_resource path="res://ui/actionbars/Actionbars.gd" type="Script" id=8] +[ext_resource path="res://ui/buttons/Buttons.gd" type="Script" id=9] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=10] +[ext_resource path="res://ui/windows/TalentWindow.tscn" type="PackedScene" id=11] +[ext_resource path="res://ui/unitframes/TargetUnitframe.tscn" type="PackedScene" id=12] +[ext_resource path="res://ui/touch_pad/analog.tscn" type="PackedScene" id=13] +[ext_resource path="res://ui/actionbars/ActionBar.tscn" type="PackedScene" id=14] +[ext_resource path="res://ui/bags/Bag.tscn" type="PackedScene" id=15] +[ext_resource path="res://ui/castbar/Castbar.tscn" type="PackedScene" id=16] +[ext_resource path="res://ui/windows/SpellBookWindow.tscn" type="PackedScene" id=17] +[ext_resource path="res://ui/minimap/MiniMap.tscn" type="PackedScene" id=18] +[ext_resource path="res://ui/loot_window/LootWindow.tscn" type="PackedScene" id=19] +[ext_resource path="res://ui/windows/CraftingWindow.tscn" type="PackedScene" id=20] +[ext_resource path="res://ui/unitframes/UnitframeBase.tscn" type="PackedScene" id=21] +[ext_resource path="res://ui/starmap/StarMap.tscn" type="PackedScene" id=22] +[ext_resource path="res://ui/theme/spellbook_icon.tres" type="Texture" id=23] +[ext_resource path="res://ui/theme/bag_icon.tres" type="Texture" id=24] +[ext_resource path="res://ui/theme/locked_icon.tres" type="Texture" id=25] +[ext_resource path="res://ui/theme/unlocked_icon.tres" type="Texture" id=26] +[ext_resource path="res://ui/player_ui/player_ui.gd" type="Script" id=28] + +[node name="GUILayer" type="CanvasLayer"] +script = ExtResource( 28 ) +loot_window_path = NodePath("GUI/Windows/LootWindow") + +[node name="GUI" type="Control" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +theme = ExtResource( 10 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_group_": true, +"_edit_lock_": true +} +player_path = NodePath("../..") +child_controls = [ NodePath("Unitframes"), NodePath("Actionbars"), NodePath("Windows/SpellBookWindow"), NodePath("Buttons"), NodePath("Castbar"), NodePath("AuraFrame"), NodePath("Windows/Inventory"), NodePath("Windows/LootWindow"), NodePath("Windows/TalentWindow"), NodePath("Windows/CraftingWindow") ] + +[node name="TouchTargetControls" type="MarginContainer" parent="GUI"] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/margin_right = 272 +custom_constants/margin_top = 481 +custom_constants/margin_left = 60 +custom_constants/margin_bottom = 41 +__meta__ = { +"_edit_group_": true, +"_edit_lock_": true +} + +[node name="HBoxContainer" type="HBoxContainer" parent="GUI/TouchTargetControls"] +margin_left = 60.0 +margin_top = 481.0 +margin_right = 752.0 +margin_bottom = 559.0 +mouse_filter = 2 +size_flags_horizontal = 7 +size_flags_vertical = 7 + +[node name="Control" type="Control" parent="GUI/TouchTargetControls/HBoxContainer"] +margin_right = 603.0 +margin_bottom = 78.0 +mouse_filter = 2 +size_flags_horizontal = 15 +size_flags_vertical = 15 +size_flags_stretch_ratio = 12.0 + +[node name="TargetPad" type="Control" parent="GUI/TouchTargetControls/HBoxContainer"] +margin_left = 611.0 +margin_right = 692.0 +margin_bottom = 78.0 +mouse_filter = 2 +size_flags_horizontal = 15 +size_flags_vertical = 15 +size_flags_stretch_ratio = 1.6 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Analog" parent="GUI/TouchTargetControls/HBoxContainer/TargetPad" instance=ExtResource( 13 )] +position = Vector2( 40, 30 ) +listenerNodePath = NodePath("../../../../../..") +padname = "TargetPad" + +[node name="TouchMovementControls" type="MarginContainer" parent="GUI"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/margin_right = 100 +custom_constants/margin_top = 200 +custom_constants/margin_left = 60 +custom_constants/margin_bottom = 50 +__meta__ = { +"_edit_group_": true, +"_edit_lock_": true +} + +[node name="HBoxContainer" type="HBoxContainer" parent="GUI/TouchMovementControls"] +margin_left = 60.0 +margin_top = 200.0 +margin_right = 924.0 +margin_bottom = 550.0 +mouse_filter = 2 +size_flags_horizontal = 7 +size_flags_vertical = 7 + +[node name="TouchPad" type="Control" parent="GUI/TouchMovementControls/HBoxContainer"] +margin_right = 203.0 +margin_bottom = 350.0 +mouse_filter = 2 +size_flags_horizontal = 15 +size_flags_vertical = 15 + +[node name="Analog" parent="GUI/TouchMovementControls/HBoxContainer/TouchPad" instance=ExtResource( 13 )] +position = Vector2( 100, 290 ) +listenerNodePath = NodePath("../../../../../..") +padname = "TouchPad" + +[node name="Control" type="Control" parent="GUI/TouchMovementControls/HBoxContainer"] +margin_left = 207.0 +margin_right = 533.0 +margin_bottom = 350.0 +mouse_filter = 2 +size_flags_horizontal = 15 +size_flags_vertical = 15 +size_flags_stretch_ratio = 1.6 + +[node name="TurnPanel" type="Control" parent="GUI/TouchMovementControls/HBoxContainer"] +margin_left = 537.0 +margin_right = 864.0 +margin_bottom = 350.0 +mouse_filter = 2 +size_flags_horizontal = 15 +size_flags_vertical = 15 +size_flags_stretch_ratio = 1.6 + +[node name="Node2D" type="Node2D" parent="GUI/TouchMovementControls/HBoxContainer/TurnPanel"] +position = Vector2( -600, -200 ) +script = ExtResource( 7 ) + +[node name="Buttons" type="Control" parent="GUI"] +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +margin_left = -202.0 +margin_top = -45.0 +margin_right = 140.0 +mouse_filter = 2 +script = ExtResource( 9 ) +__meta__ = { +"_edit_group_": true, +"_edit_use_anchors_": false +} +spell_book_path = NodePath("../Windows/SpellBookWindow") +spell_book_button_path = NodePath("HBoxContainer/SpellBookButton") +lock_button_path = NodePath("HBoxContainer/LockButton") + +[node name="HBoxContainer" type="HBoxContainer" parent="GUI/Buttons"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/separation = 0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="SpellBookButton" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_right = 45.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +hint_tooltip = "SpellBook" +focus_mode = 0 +toggle_mode = true +enabled_focus_mode = 0 +keep_pressed_outside = true + +[node name="TextureRect" type="TextureRect" parent="GUI/Buttons/HBoxContainer/SpellBookButton"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -15.0 +margin_top = -15.0 +margin_right = 15.0 +margin_bottom = 15.0 +texture = ExtResource( 23 ) +expand = true +stretch_mode = 6 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="BagButton" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_left = 45.0 +margin_right = 90.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +hint_tooltip = "Inventory" +focus_mode = 0 +toggle_mode = true +enabled_focus_mode = 0 +keep_pressed_outside = true + +[node name="TextureRect2" type="TextureRect" parent="GUI/Buttons/HBoxContainer/BagButton"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -15.0 +margin_top = -15.0 +margin_right = 15.0 +margin_bottom = 15.0 +texture = ExtResource( 24 ) +expand = true +stretch_mode = 6 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TalentButton" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_left = 90.0 +margin_right = 135.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +hint_tooltip = "Inventory" +focus_mode = 0 +toggle_mode = true +enabled_focus_mode = 0 +keep_pressed_outside = true +text = "T" + +[node name="CraftingButton" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_left = 135.0 +margin_right = 180.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +hint_tooltip = "Inventory" +focus_mode = 0 +toggle_mode = true +enabled_focus_mode = 0 +keep_pressed_outside = true +text = "Cr" + +[node name="MapButton" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_left = 180.0 +margin_right = 225.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +hint_tooltip = "Inventory" +focus_mode = 0 +toggle_mode = true +enabled_focus_mode = 0 +keep_pressed_outside = true +text = "Map" + +[node name="LockButton" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_left = 225.0 +margin_right = 270.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +focus_mode = 0 +toggle_mode = true +enabled_focus_mode = 0 +keep_pressed_outside = true + +[node name="locked" type="TextureRect" parent="GUI/Buttons/HBoxContainer/LockButton"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -15.0 +margin_top = -15.0 +margin_right = 15.0 +margin_bottom = 15.0 +texture = ExtResource( 25 ) +expand = true +stretch_mode = 6 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="unlocked" type="TextureRect" parent="GUI/Buttons/HBoxContainer/LockButton"] +visible = false +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -15.0 +margin_top = -15.0 +margin_right = 15.0 +margin_bottom = 15.0 +texture = ExtResource( 26 ) +expand = true +stretch_mode = 6 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Menu" type="Button" parent="GUI/Buttons/HBoxContainer"] +margin_left = 270.0 +margin_right = 315.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) +focus_mode = 0 +enabled_focus_mode = 0 +keep_pressed_outside = true +text = "M" + +[node name="Actionbars" type="Control" parent="GUI"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource( 8 ) +__meta__ = { +"_edit_lock_": true +} +actionbar_scene = ExtResource( 14 ) + +[node name="Windows" type="CanvasLayer" parent="GUI"] +layer = 2 + +[node name="SpellBookWindow" parent="GUI/Windows" instance=ExtResource( 17 )] +visible = false +margin_left = 60.0 +margin_top = 50.0 +margin_right = 561.0 + +[node name="TalentWindow" parent="GUI/Windows" instance=ExtResource( 11 )] +visible = false +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 61.685 +margin_top = 54.195 +margin_right = 430.685 +margin_bottom = 513.195 + +[node name="CraftingWindow" parent="GUI/Windows" instance=ExtResource( 20 )] +visible = false +margin_left = 31.0 +margin_top = 23.0 +margin_right = -345.0 +margin_bottom = -67.0 + +[node name="Inventory" parent="GUI/Windows" instance=ExtResource( 15 )] +visible = false +margin_left = 56.0 +margin_top = 69.0 +margin_right = -422.0 +margin_bottom = -109.0 +inventory_item_container_path = NodePath("../Inventory/VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer/ScrollContainer/GridContainer") + +[node name="LootWindow" parent="GUI/Windows" instance=ExtResource( 19 )] +visible = false +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 39.0 +margin_top = 85.0 +margin_right = 242.0 +margin_bottom = 315.0 + +[node name="StarMap" parent="GUI/Windows" instance=ExtResource( 22 )] +visible = false + +[node name="Map" parent="GUI/Windows" instance=ExtResource( 6 )] +visible = false + +[node name="Unitframes" type="Control" parent="GUI"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 1.0 +margin_right = 1.0 +mouse_filter = 2 +script = ExtResource( 3 ) +__meta__ = { +"_edit_lock_": true +} +player_unit_frame_path = NodePath("PlayerUnitFrame") +target_unit_frame_path = NodePath("TargetUnitframe") + +[node name="PlayerUnitFrame" parent="GUI/Unitframes" instance=ExtResource( 21 )] +margin_right = 151.0 + +[node name="TargetUnitframe" parent="GUI/Unitframes" instance=ExtResource( 12 )] +visible = false + +[node name="MiniMap" parent="GUI" instance=ExtResource( 18 )] + +[node name="AuraFrame" parent="GUI" instance=ExtResource( 5 )] +margin_left = -331.0 +margin_bottom = 123.0 + +[node name="Castbar" parent="GUI" instance=ExtResource( 16 )] +visible = false +margin_left = 382.0 +margin_top = 461.0 +margin_right = 607.0 +margin_bottom = 480.0 +mouse_filter = 2 + +[node name="ErrorFrame" parent="GUI" instance=ExtResource( 4 )] +anchor_left = 0.5 +anchor_right = 0.5 +margin_left = -191.728 +margin_top = 140.333 +margin_right = 180.272 +margin_bottom = 288.333 +mouse_filter = 2 + +[node name="IngameMenu" parent="GUI" instance=ExtResource( 2 )] +visible = false +[connection signal="pressed" from="GUI/Buttons/HBoxContainer/BagButton" to="GUI/Windows/Inventory" method="show"] +[connection signal="pressed" from="GUI/Buttons/HBoxContainer/TalentButton" to="GUI/Windows/TalentWindow" method="show"] +[connection signal="pressed" from="GUI/Buttons/HBoxContainer/CraftingButton" to="GUI/Windows/CraftingWindow" method="show"] +[connection signal="pressed" from="GUI/Buttons/HBoxContainer/MapButton" to="GUI/Windows/Map" method="show"] +[connection signal="pressed" from="GUI/Buttons/HBoxContainer/Menu" to="GUI/IngameMenu" method="show"] diff --git a/game/ui/register/Register.tscn b/game/ui/register/Register.tscn new file mode 100644 index 00000000..2f36a84f --- /dev/null +++ b/game/ui/register/Register.tscn @@ -0,0 +1,114 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] + +[node name="Register" type="PanelContainer"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -107.5 +margin_top = -182.0 +margin_right = 107.5 +margin_bottom = 182.0 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 211.0 +margin_bottom = 360.0 +custom_constants/separation = 10 +alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 207.0 +margin_bottom = 30.0 +size_flags_horizontal = 3 + +[node name="Label3" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 7.0 +margin_right = 159.0 +margin_bottom = 22.0 +size_flags_horizontal = 3 +text = "Register" + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 167.0 +margin_right = 207.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 40, 30 ) +text = "X" + +[node name="HSeparator" type="HSeparator" parent="VBoxContainer"] +margin_top = 40.0 +margin_right = 207.0 +margin_bottom = 48.0 + +[node name="Label" type="Label" parent="VBoxContainer"] +margin_top = 58.0 +margin_right = 207.0 +margin_bottom = 73.0 +text = "Username" + +[node name="LineEdit" type="LineEdit" parent="VBoxContainer"] +margin_top = 83.0 +margin_right = 207.0 +margin_bottom = 107.341 + +[node name="Label4" type="Label" parent="VBoxContainer"] +margin_top = 117.0 +margin_right = 207.0 +margin_bottom = 132.0 +text = "Email" + +[node name="LineEdit4" type="LineEdit" parent="VBoxContainer"] +margin_top = 142.0 +margin_right = 207.0 +margin_bottom = 166.341 + +[node name="Label2" type="Label" parent="VBoxContainer"] +margin_top = 176.0 +margin_right = 207.0 +margin_bottom = 191.0 +text = "Password" + +[node name="LineEdit2" type="LineEdit" parent="VBoxContainer"] +margin_top = 201.0 +margin_right = 207.0 +margin_bottom = 225.341 +secret = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label3" type="Label" parent="VBoxContainer"] +margin_top = 235.0 +margin_right = 207.0 +margin_bottom = 250.0 +text = "Password Again" + +[node name="LineEdit3" type="LineEdit" parent="VBoxContainer"] +margin_top = 260.0 +margin_right = 207.0 +margin_bottom = 284.341 +secret = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CheckBox" type="CheckBox" parent="VBoxContainer"] +margin_top = 294.0 +margin_right = 207.0 +margin_bottom = 320.269 +text = "I Accept the EULA" + +[node name="Button" type="Button" parent="VBoxContainer"] +margin_top = 330.0 +margin_right = 207.0 +margin_bottom = 356.269 +text = "Register" +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="hide"] diff --git a/game/ui/spellbook/SpellEntryPopup.gd b/game/ui/spellbook/SpellEntryPopup.gd new file mode 100644 index 00000000..c98fa4b8 --- /dev/null +++ b/game/ui/spellbook/SpellEntryPopup.gd @@ -0,0 +1,27 @@ +extends PopupPanel + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var label_path : NodePath +export(NodePath) var desc_label_path : NodePath + +var _label : Label +var _desc_label : RichTextLabel + +var _spell : Spell + +func _ready(): + _label = get_node(label_path) as Label + _desc_label = get_node(desc_label_path) as RichTextLabel + +func set_spell(spell : Spell) -> void: + _spell = spell + + if _spell == null: + return + + _label.text = _spell.text_name + _desc_label.text = _spell.text_description + diff --git a/game/ui/starmap/StarMap.tscn b/game/ui/starmap/StarMap.tscn new file mode 100644 index 00000000..b2a6bfbc --- /dev/null +++ b/game/ui/starmap/StarMap.tscn @@ -0,0 +1,72 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] + +[node name="StarMap" type="PanelContainer"] +margin_right = 531.0 +margin_bottom = 442.0 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 527.0 +margin_bottom = 438.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 523.0 +margin_bottom = 40.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 12.0 +margin_right = 475.0 +margin_bottom = 27.0 +size_flags_horizontal = 3 +text = "Starmap" + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 483.0 +margin_right = 523.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 40, 40 ) +text = "X" + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +margin_top = 48.0 +margin_right = 523.0 +margin_bottom = 396.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/ScrollContainer"] + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 404.0 +margin_right = 523.0 +margin_bottom = 434.0 +alignment = 1 + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer2"] +margin_left = 133.0 +margin_right = 213.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 80, 30 ) +text = "Search" + +[node name="Button2" type="Button" parent="VBoxContainer/HBoxContainer2"] +margin_left = 221.0 +margin_right = 301.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 80, 30 ) +text = "Custom" + +[node name="Button3" type="Button" parent="VBoxContainer/HBoxContainer2"] +margin_left = 309.0 +margin_right = 389.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 80, 30 ) +text = "Go" +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="hide"] diff --git a/game/ui/talents/Spec.gd b/game/ui/talents/Spec.gd new file mode 100644 index 00000000..3493d715 --- /dev/null +++ b/game/ui/talents/Spec.gd @@ -0,0 +1,35 @@ +extends ScrollContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var talent_row_scene : PackedScene +export(NodePath) var container_path : NodePath + +var _container : Node + +var _player : Entity +var _spec : CharacterSpec +var _spec_index : int + +func _ready() -> void: + _container = get_node(container_path) + +func set_spec(player : Entity, spec : CharacterSpec, spec_index: int) -> void: + for ch in _container.get_children(): + ch.queue_free() + + _player = player + _spec = spec + _spec_index = spec_index + + if _player == null or _spec == null: + return + + for i in range(spec.get_num_talent_rows()): + var r : Node = talent_row_scene.instance() + _container.add_child(r) + r.owner = self + r.set_player(player, spec, spec_index, i) + diff --git a/game/ui/talents/Spec.tscn b/game/ui/talents/Spec.tscn new file mode 100644 index 00000000..18b157aa --- /dev/null +++ b/game/ui/talents/Spec.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/talents/Spec.gd" type="Script" id=1] +[ext_resource path="res://ui/talents/TalentRow.tscn" type="PackedScene" id=2] + +[node name="Spec" type="ScrollContainer"] +margin_right = 882.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +talent_row_scene = ExtResource( 2 ) +container_path = NodePath("Container") + +[node name="Container" type="VBoxContainer" parent="."] +margin_right = 858.0 +size_flags_horizontal = 3 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/talents/TalentEntry.gd b/game/ui/talents/TalentEntry.gd new file mode 100644 index 00000000..0cd341ab --- /dev/null +++ b/game/ui/talents/TalentEntry.gd @@ -0,0 +1,109 @@ +extends CenterContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var main_container_path : NodePath +export(NodePath) var popup_path : NodePath + +export(NodePath) var aura_name_label_path : NodePath +export(NodePath) var aura_description_label_path : NodePath +export(NodePath) var icon_rect_path : NodePath +export(NodePath) var rank_label_path : NodePath +export(NodePath) var upgrade_button_path : NodePath + +export(int) var culomn : int + +var _main_container : Control +var _popup : PopupPanel + +var _aura_name_label : Label +var _aura_description_label : Label +var _icon_rect : TextureRect +var _rank_label : Label +var _upgrade_button : Button + +var _row : int +var _spec_index : int + +var _player : Entity +var _spec : CharacterSpec + +func _ready() -> void: + _main_container = get_node(main_container_path) as Control + _popup = get_node(popup_path) as PopupPanel + + _aura_name_label = get_node(aura_name_label_path) as Label + _aura_description_label = get_node(aura_description_label_path) as Label + _icon_rect = get_node(icon_rect_path) as TextureRect + _rank_label = get_node(rank_label_path) as Label + _upgrade_button = get_node(upgrade_button_path) as Button + +func set_player(player : Entity, spec : CharacterSpec, spec_index : int, row : int) -> void: + if _player != null: + _player.disconnect("ctalent_learned", self, "ctalent_learned") + _player.disconnect("ctalent_reset", self, "ctalent_reset") + + _row = row + _spec = spec + _player = player + _spec_index = spec_index + + _player.connect("ctalent_learned", self, "ctalent_learned") + _player.connect("ctalent_reset", self, "ctalent_reset") + + refresh() + + +func refresh() -> void: + var tr : TalentRowData = _spec.get_talent_row(_row) + + if tr.get_talent(culomn, 0) == null: + _main_container.hide() + return + + var rank_count : int = 0 + var known_rank_count : int = 0 + + for i in range(TalentRowData.MAX_TALENTS_PER_ENTRY): + var a : Aura = tr.get_talent(culomn, i) + + if a == null: + break + + if _player.hasc_talent(a.id): + known_rank_count += 1 + + rank_count += 1 + + var ridx : int = known_rank_count - 1 + + if rank_count == known_rank_count: + _upgrade_button.hide() + else: + ridx += 1 + + _upgrade_button.show() + + var aura : Aura = tr.get_talent(culomn, ridx) + + _aura_name_label.text = aura.text_name + _aura_description_label.text = aura.text_description + _icon_rect.texture = aura.icon + _rank_label.text = str(known_rank_count) + "/" + str(rank_count) + +func open_popup() -> void: + var p : Vector2 = rect_global_position + p.x += rect_size.x + + _popup.popup(Rect2(p, _popup.rect_size)) + +func upgrade(): + _player.crequest_talent_learn(_spec_index, _row, culomn) + +func ctalent_learned(entity: Entity, talent_id: int) -> void: + refresh() + +func ctalent_reset(entity: Entity) -> void: + refresh() diff --git a/game/ui/talents/TalentEntry.tscn b/game/ui/talents/TalentEntry.tscn new file mode 100644 index 00000000..78783728 --- /dev/null +++ b/game/ui/talents/TalentEntry.tscn @@ -0,0 +1,110 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/talents/TalentEntry.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=2] + +[node name="TalentEntry" type="CenterContainer"] +margin_right = 40.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 45, 45 ) +size_flags_horizontal = 3 +theme = ExtResource( 2 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +main_container_path = NodePath("Button") +popup_path = NodePath("Button/PopupPanel") +aura_name_label_path = NodePath("Button/PopupPanel/VBoxContainer/HBoxContainer/Label") +aura_description_label_path = NodePath("Button/PopupPanel/VBoxContainer/Label") +icon_rect_path = NodePath("Button/MarginContainer/TextureRect") +rank_label_path = NodePath("Button/MarginContainer/TextureRect/Label") +upgrade_button_path = NodePath("Button/PopupPanel/VBoxContainer/HBoxContainer/Button") + +[node name="Button" type="Button" parent="."] +margin_right = 45.0 +margin_bottom = 45.0 +rect_min_size = Vector2( 45, 45 ) + +[node name="MarginContainer" type="MarginContainer" parent="Button"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +custom_constants/margin_right = 3 +custom_constants/margin_top = 3 +custom_constants/margin_left = 3 +custom_constants/margin_bottom = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TextureRect" type="TextureRect" parent="Button/MarginContainer"] +margin_left = 3.0 +margin_top = 3.0 +margin_right = 42.0 +margin_bottom = 42.0 +expand = true + +[node name="Label" type="Label" parent="Button/MarginContainer/TextureRect"] +anchor_right = 1.0 +anchor_bottom = 1.0 +text = "2/2" +align = 2 +valign = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="PopupPanel" type="PopupPanel" parent="Button"] +margin_left = 41.592 +margin_top = 1.58763 +margin_right = 211.592 +margin_bottom = 127.588 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="Button/PopupPanel"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 166.0 +margin_bottom = 122.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="Button/PopupPanel/VBoxContainer"] +margin_right = 162.0 +margin_bottom = 30.0 + +[node name="Label" type="Label" parent="Button/PopupPanel/VBoxContainer/HBoxContainer"] +margin_top = 7.0 +margin_right = 124.0 +margin_bottom = 22.0 +size_flags_horizontal = 3 +text = "asdasdasdasdasda" +valign = 1 + +[node name="Button" type="Button" parent="Button/PopupPanel/VBoxContainer/HBoxContainer"] +margin_left = 132.0 +margin_right = 162.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 30, 30 ) +text = "X" + +[node name="Button" type="Button" parent="Button/PopupPanel/VBoxContainer"] +margin_top = 38.0 +margin_right = 162.0 +margin_bottom = 64.269 +text = "Upgrade" + +[node name="Label" type="Label" parent="Button/PopupPanel/VBoxContainer"] +margin_top = 72.0 +margin_right = 162.0 +margin_bottom = 118.0 +size_flags_horizontal = 3 +size_flags_vertical = 7 +text = "increases your Dodge by 5%. +Also Adds 10% lols." +[connection signal="pressed" from="Button" to="." method="open_popup"] +[connection signal="pressed" from="Button/PopupPanel/VBoxContainer/HBoxContainer/Button" to="Button/PopupPanel" method="hide"] +[connection signal="pressed" from="Button/PopupPanel/VBoxContainer/Button" to="." method="upgrade"] diff --git a/game/ui/talents/TalentRow.gd b/game/ui/talents/TalentRow.gd new file mode 100644 index 00000000..987554fe --- /dev/null +++ b/game/ui/talents/TalentRow.gd @@ -0,0 +1,9 @@ +extends HBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +func set_player(player : Entity, spec : CharacterSpec, spec_index: int, row : int) -> void: + for ch in get_children(): + ch.set_player(player, spec, spec_index, row) diff --git a/game/ui/talents/TalentRow.tscn b/game/ui/talents/TalentRow.tscn new file mode 100644 index 00000000..b556fa09 --- /dev/null +++ b/game/ui/talents/TalentRow.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://ui/talents/TalentEntry.tscn" type="PackedScene" id=1] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=2] +[ext_resource path="res://ui/talents/TalentRow.gd" type="Script" id=3] + +[node name="TalentRow" type="HBoxContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +theme = ExtResource( 2 ) +alignment = 1 +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TalentEntry" parent="." instance=ExtResource( 1 )] +margin_right = 198.0 +margin_bottom = 600.0 + +[node name="TalentEntry2" parent="." instance=ExtResource( 1 )] +margin_left = 206.0 +margin_right = 404.0 +margin_bottom = 600.0 +culomn = 1 + +[node name="TalentEntry3" parent="." instance=ExtResource( 1 )] +margin_left = 412.0 +margin_right = 610.0 +margin_bottom = 600.0 +culomn = 2 + +[node name="TalentEntry4" parent="." instance=ExtResource( 1 )] +margin_left = 618.0 +margin_right = 816.0 +margin_bottom = 600.0 +culomn = 3 + +[node name="TalentEntry5" parent="." instance=ExtResource( 1 )] +margin_left = 824.0 +margin_right = 1024.0 +margin_bottom = 600.0 +culomn = 4 diff --git a/game/ui/talents/talent_switcher_button.gd b/game/ui/talents/talent_switcher_button.gd new file mode 100644 index 00000000..2ef16163 --- /dev/null +++ b/game/ui/talents/talent_switcher_button.gd @@ -0,0 +1,16 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +var _index : int +var _spec_window : Node + +func set_spec_index(spec_window : Node, index : int) -> void: + _index = index + _spec_window = spec_window + +func _toggled(button_pressed): + if button_pressed: + _spec_window.select_spec(_index) diff --git a/game/ui/talents/talent_switcher_button.tscn b/game/ui/talents/talent_switcher_button.tscn new file mode 100644 index 00000000..637bbe72 --- /dev/null +++ b/game/ui/talents/talent_switcher_button.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/talents/talent_switcher_button.gd" type="Script" id=1] + +[node name="TalentSwitcher" type="Button"] +margin_left = 301.0 +margin_right = 401.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 70, 30 ) +text = "Melee" +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/theme/GameUI.png b/game/ui/theme/GameUI.png new file mode 100644 index 0000000000000000000000000000000000000000..21f456f16fc478fa4ebdb416ca62b45a36df3758 GIT binary patch literal 16423 zcmV+?K-j;DP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>vk|ntfr2q32Is*6QI9$!<26O!RoP3#;Ro!Yy zW}{M9R=y>IBmjpy2!`4J_x~L8uYdi^xlpr-snpzZw)`))*nH<7)xQ6=`?s_4{(b-V z^%lSX_PY6g!}C($XL!Gs{`q|8_4L;Zx$*n!rheY>^>d-m8($X;y0hmW>*pYO-M`me z{9LH*_mA9a`8m|#-_QB^;2p~6zm@IOOR2oK^t<`_LM*J(O57-Tzk>_*{vF>40;3Bp zbpCey&F@~X#QX1R_>n^SjD!XGZF*lnt^K(`zb*3Dzs#Sj|NXB&7T@>J>*0^J%%3&l zAAkFXOMk!kcZq-8IDC)D|Ncgde*9%Rpa0HT^_=}?*JEZy^T(sC`C1))hYxa*81C0H ze+vI4{$1{$#-D1totS)Kx51z3n)6uY7#H1g-5s~@&*>&ZjDGvVPw%G>_q7^|Z+?bn zC;qtO3pQM#VzcSD34xdW_gLJ$Z@c%Ku5#z)_^5YW%<+|f`^Ws#oBzunbB>(UIa|Ni zig9`QHN%kQ^f#ZvAnttZmhJ+7{rQ;R{_r1M6$_@j%#{gtJKiNma=&~lTssFom-zWY z$eFS}7hs9FcVaMvKy)^{kX&}Qcwd}j9V-UvjNAu21Pi#7{9=$khLF7}zIxr8?-X}G z>yyu3FM~}OB840Zwjs(eR*VV%DY4>1J%togN;#EOO=_vn&2~Lu1hQ)kzSiHyrIJB3|Y;{DmEGL`U<_U`A8Dx@e%yP0A zCXCzpblkV?ep&9nvYScuzp|VEPnI(>-Tx2E8BF(AyZw#Tmh#-Z7JE^sHMN20JC3Uc z6DxN;Ba&=e&&RjyXO5d2w#j-9cXA&MXiPnwqx2SwetJ8&i6E?;S?xA@@$A*~bJv)e z(Aho({q7jdX_5cV=Kq5i-9C$48roXv+(Fn8YtPl>d;+UJw`CNgV%NX`N*^V!?KVU0 z6NA^r#AiR4yr$#lC^6K-C|4C*Jk{2n+dAit{!Xn~<}>qfBeh}U3i-q}ddPc?m4>TR^Y3S@f=Ahw<<}EDUMye( z?`v76&xXPH7}H=)gG+Oj%5rQF#Fx#0yX`QD+;iiDEHAg~Yes+S+=b=Xn8lg3YUwGp zg0B}ABH>RYi_Lh>ois1B?q?f?T(TQqK9l^xze>>8a^uM>4y&NeB2QmaF4sF*AePhMFPRMH>w{RiuussuG(E!(l zXM=HLGThP}e8}OmrLWpZY-Z&IS&3z=H=)^Co{$m|ajgM+xjq)iHhx@O;kSBL!>d_H zIhE%t#$ic&T}~gE)h}I#sF=Gh=oj(kqW-^G44jA{>>H~o99BNCspA69ZL06{dbP## zNfMe)+_n4K#Rt1@tX4dJm&|`|m8K<4ah|+)b9)oIWeI9of96pv5e~?)KG+eSR=Z5X z$9g<7oQ4A=r^_=J`~7n`yEB0qBI|moiFM6qLCcU*amA#6|Iy`y_trnhD_bk+=5Y8fTOeudj7`W0iTgU5;!D?6Sv&bKDPuQwo7$&{y|bm;L|2k;W``O-=5bU#* zH^R*bfM`;P%SAWz{Dex@7`b?ss|+XtEIlRi2zCSzLI{BOjNu>nT(Z4GOUv>A>K?xD zoyZ}DYvRI|g4D0W0?UD_#HurD7*S8LDN^T3Z(`9&4b%SmNAHoFr0s7joSb zU(Cv~j7Pu$fWb}bVzi_Ie9?&>ZE|DnovF@EFxHLtj1UN}!yKI5+xWF27fvaDptb(^ z2_j6GU~DWZ?w^YMAHzk9$F4p40$I|4ARTjv0Ag^lAp8vn*kg>nOWK1)X5H|Hkrq$~ z>$pHeDECsCXYAM8p&OgLMgWo<@nN7j0!4UB_pV{_$+E&0-HAkJhu8!SEl7-k$OAYe z{9O}!VRU8?kp13p=!TVy1Ly+(+z_54_yr_ws>&KO7v*{US%8LdiQ+ZJ+@lyEim9~? z{Q&t0Fp@Ci9>=!9QovE_2CtZS86Z8wpGg_J*_S}WO=c+=1q-~>Gbld*R-A$iR94)i z<-PXOts%1z5P>lu0ec?+8@Rf5f-pg#2qxpLAf~mGNL`JACpW~i(!8^SqQS~^5iZCw zK}t{en1BFR6ho;=GBI_-Od-c$#kq-soP_bfc91xA6x<@UV2Z2&@*e67KiO;Q!)Fk* zpsfhrF)S!f3~MJvf+#+RoAXe0SiQkope2t(G0g6W19=ZyhtYhNY8Hi-MU=T5yiQNsbZBk4N3}WVe zxDqA>_s~3C`Unb`FFB=>;6k%+GPMgFNCc!hESus+_(6275YNR6d0B7^N(#h5_gnbF zfCQXZ(AYodj2nSe?1x!Hj5gf7>4Ml27Caf^?=l<_K7(qANi^=-6q%IVf)YdK0PjPV z+=oRq#||&bX(9chzr@5=x+3li`mIe&l^)R4Gxp#{5PN{82OI|J=~)#BpP7nG>5xO{ z;u@i<_)@u2LP*srhP%O8Q1_@Vc>I`;zB=J9vnaTEQUEd=crAV`-sni_SQhyB83PqMZ!3NPL#yu^uM?KN-Z zHGUOA6IXQwB!fSp$y~t+c7uPH#_VAHa4m#pMp}d5P^mlW4c1=a=e_PJJ(ib~00z)s zc9<*>%$0~lM-yr`Jf+Jh#6;?NsWk=!-tmTzT?IEl~aM%`I0UU3l7q8e- z!Xyq58R2(G7S%HWpUOaBGNWq^{NkeQa=@(H;1ArnKn|stl*1alYq6kUa+@Yg88BpA zorDX&g+I!iXFYx!n?^*E&!<8d2ZE49ifDzM0uv9yGFF3lLzmGg;$QNXnSr$;a(t~} zvG*gQWGbx7eV_D$i9%igq>D?!O0}&jme#PK@DR)9YWYAfG*nl zO*(ouBR=nJQ5Q!71*Ix73>gPDpxT6t)}tLnLn=@{0)|`(3XrK5CU5D-&(VQ1`dZZKJW98_?mYQk_=rDKvY z?j)LkR`3uRz(0rxl3U{vd0A4K5dy3*2F*)`ZR9C>rjm-QRRuRzNy=u6Q7QjogJnAR zL^DYY07yT6BQh-%3W=6`fgq#GrRVa@+_^Dipn|1}a^R5MtJWYJv6*U9SFYmdjsYS5 z-0%(Dx_-0(@$@3zL8hGm@s_u|{x%Fxzya9J0bi-Z?;VFGxgiHxml-6%Ams`83x4D- zsMRUgua`LTqJmMG$U?WGwqe7>PXoNIwVG0@oTOiAVV=GG$Ciy&GJ5_iB82^V0rWMc_j-1gD#? z2IOrf%#^{Pdn^-)6?}(}7vP-~3?0U=WA66Af}erfrI|VyZjvw^z)`?P(ekv z$*PdLg;r1dqKwk3Yl)>Y^W5yfz6Ptio=p&BsvAUJ+-&9}yW1q5!kOIRHO`{S=FS4XUzXe$VueoD#LWa7vFZgzQ^* z1L-XD1JaBT1f>lguX-1f#52X_0kRE+%)4X0*@jUJL?yJ6 zOoB+A+H%1xFilYllqWks&Zu0sxM0RUw2do9m|qwsN4_VErWt1+%uFDg>On|tgUaGc|Kmqb&7sFwQ z2tTX_aPG@{^bQDCMVLjYq{a|os0Hcpj!l-vvw3nki0ODDz^&)+Ju#*km_V^Z3n;~Nja=Dd6F4oNPK>g zmWC?2s4(T6UScxbpG<*kRR?lm?Ae-XZcP|~jgsZt$XS?IMDZgmwrbilpsyD0$#A*U zbVjKdmEDwPirjSE>!|uO5vYj}77vJwO8e)7QHv%h62;w5zcM3t!w7~_-ieRH*7YEe zP^hG8o1pf13(3@GXafNcQ@hts`3W^Mvhzan+x(Upv{HH6V0nv0!3cN2czwoIS1I8>3Tr#Non!xCzT}nozJ&&X= zh6HpYF0FIWd8O1Y*uUjeZpJrr&>lw&+T{?zo;ZF&h*;h2m^70LblTHPR=6R0vR|T1 z7%)__blmRov;u}J%EM>^G+2j3830fXx#4r~8@;3`Lb33k1nSMNQo`wH93ryTCa=Tl zK_E%a<`Q@W%%L#-iTP7&%GwKLK_@Xqo`kbz_+7AI@s6xmmroPs4y#U&JY893ABim} zHmI27S%=I%QDLm$n+~3d9wZLFw~SPEQv(BV9VK!L`2_Q~&U|p{Sg#NoV)U>sIiV|W zZ_j>8KCBwJHR`Q@b{KRoxv})K*kXc;s})6buH20TmUagmnl(MaPO^OwA4EH#qfuMH z`&KzRls>@Tni^2b6gk)CYOGS?5JKo8S-lGV$QkgokyRAT0d`_lL%mHwN0rl_k;*f5 zgBBn?p>=PtJ}Q-wT6i_YDcouT(8yHYj&2i+RRWD-9G6d^tzx?gQaJ{}x(SSfk;oe8 zRGgbZ;C48K1214YQJYci*EhH@uJLYQn(&vEV0G>t1eB^Gk%AVh1_OuYsNkKivSUpo z{I_@nA??xxD*}cx7`Q@H#*#9EWZ++W=nu)X?>Pf1NOX#@SPipo2N04BQsMUoEk{Wo z@W2GQ9xBXc+vi( z%{t}{@e)T!A1}nGOJlOA6Jj2H6F_!El{T(}rbb5n^XgEBzK>%)b_PQ14V{X}B}mW_ z(3zso;o1smz8a%7;Iww6lbwSwOr%#hySE5UNMF&;6TtwV#ND;y*|h<#wFYg8Y`HJ; zq<9ZzLvyhVZVZA5@{bxyv<^_c^?2=<6OMTD)|jV{TD`6J<=#M`I4;j>g# zspQlpb+$j6Ou-Oqfhez>afC3f!su>#<8=!uNA#=l!;2dt@AFn^9d)X_10Vz0vATs= z$Dv2M)xOLAlX8+3e}@+q0>wzRkjw~OLLB)FTm+N=!4Xl=xD{!XBs#R693_w7e#p6_ zBth6r_`H~UGx!r9w4VhbU8aVJe!wc+KYZaPs$19_Do)m z>e2u#w8L1G125T&a^I9{j_yuMZJ+~rm^|Q^$Fg_hiQXq@398l5*0{~kIg@62DocDe; zH>QNMxdoetJczWhcv=pCxU^gCMJG5_A)LI@Boq$9sMr~#koTYamEsH#6nOO|=kn2Y zu_UCpe{?mNyW47S7KNRlVniy5KSUw(NKNfL!D)Iv3M1`Bovp@==%qOzU#{+bOJl^K z4c?Wd^*BlUh(LyC5h4*YB;(bAl(fH&^oDeDL%B>&EapNvZG<0EDbC+Zaew|K9*>Gl zYTW^i7jAUTcXtV(Paw}RI|$#Q%mV!Yvv%5gk@3Rbs{P!i4?>pAx68O-iTH9A&Ye)t z70Sr)wuw-5;;k+5AFisedt#A%K^%e2({1Lda<&uS=AKwl>`(f&sSmWVO3^@N(0Z_L z*0mImrvwN@!~iyGqf8|kbp*)yK)|DhnuI`sfr8&GvxJ~H9i14DJH&s+#e7G!!HB)xXC^r~qL zp;UWW8KJG~PxWa|Lwu7SlR9^h5vR(f(So}{20l9xh&j2rN42MpBxX%hA=n%$Bu@x} zDx609mbX`oxXw{}Y^&D@r+u|Fc;{^)1J0p)h|V@}L(;T1{&9EhAd+{+Q`x|Uc75#h z_ysq*c}!ga173}5jB_`T6QBljMP`Y^>vIZIARS$0erM_G$5kMgSup7Vx!%M{zKAy`;nY%&0aSRmw$iH;geA;)6#^tl z|IvBor{MegiF8KjEXW^71bk?>N-FGt?vP>f4*V#|pU7nv9*)-=Va?lX5h|)~w$))+ z$viA97UI_MFFqt8x6oI&I}R`z0Jb0=C&;8Dawfzd5zBlAP9~{CjIkbw`0Z7UWR$~+ zb&&SAnl+}%t!iF#uWe``q>L1@suZIQ!Z@o4r2<+f&g<9iB~h5)c2T$;kJ{AbirTz< zyZ1nW8C%e}`dY7{LM6%!UE0!v?d>{f zD+zIf2*lF2ug`n*EJ;cGy^I`=h}9Bkb@zLjwAwQQD7Ut|`@IWZ0=6ok@0Q$oIG`du zqGNK^u4UU=HY2cKlV8YfBxj7L{dPyPlsjL+F<~!iU_OHEpxu2$uILiW3R}@82rx2E zCi`iPgSM3SQ9@*1#5cy$%7DG)t<@6W!E0cW+p6C}a!O675hOmQKxmzdl6vsR|g$Pb>GPuW4${N$k-zLu$vb?J)!wKedy zGZ0kA+squkce?6Gj$Mf+pO~lcd5#=KjVu(ymorMCAY8 zZSXgxwI7l_zD-AXOlnOP_RG<-_Wab~WUpx_;sO#{wBbD@uU`BYHHhZpi zKuVr!g2xrG8IrO=k(Uax!uE0CRswI844e9$0)&}w7zJ>sYLiflk80Xjh8w!BUZ}fa zq&7jsMU#rfz52d6n%upVi?YCiH3F~I(m2#UElkC(>L*tRx56AQfaqt~S%O}zt?Et1 zbW5AfEHHwuddz7mCmRThTimurSM5J0GnT+DRbd7@xBg(wIW10pv zjoJ?g?d>6>f@1sv{g0G6AAOWNgnSHbof3>hRllFmhUtZojj#X=Nm*I_8|kQHks$^A zqlh4dam|1RyLE?n&ss=w-&>2QEQ5_)L#zOtx5+pst6qswg%X&5x7!Y%S!|Js2x-}| z^n}BQ&kku4;2Am29eA(dK|OD%xk@XpRtQ#nltPl%iYMsi@vtJTcv;$50IbNkL*>J8 zSZDj$fBcO9j-JcE@mIAA-YO#RlbXP3$m`t~A5$)Z%#yqul_(~WuxQcw(A}q#Uwz_t zS4`C){PROKptz#aF8flu{2A9*^C?=v3746Y`pfMn6p2)2`Z-?rLCfeaUmdd`j#*x9 z3c@omo>R%iun5TJYu1AZ;8%hN2cCq=PX2aTI+5>ndz4B2cM#I#$YB5-?N2&IWveAG zw*UpVSzVmu{JZ}M!x(TXJRwKbH5uma$ixfRIOFthtO~2yifQGu1sy~1T2JJ&M9gPB z-<2^Bf3uu;gbKhcr`375&~XXk1{0ex)KS8`C1UgIxro?<43EXo8Of>12Tc-gBY9ii zAK1%T#oZ!G(f&qH23jWhS*= zSA!N;C*4mj>LI+aTrv%i%UpDX2uA0c9RLuH2?TMO2s$;dYL(h2(fz_X;&!W)dOS2$ zi~>%}N9#Qrvx`?RyBgdGOAIq^Um)BM28a)31b;MYm{1!wB)a>a{#u5sKdZD04^q8M z$D@EPa-@i^N0S(Uy|Io=eqw|+AIQIhI10n9Ue5l?E?lhA7tt z9C1$CXt%};_MtIJv$vDJ=?DwLZ1!dk!KB{z03krH&tT!h+gqfGfm%ucZsg?SW$+RB zBYcH1j+T488!(xSjYw9d4ZQ(3yt~}}wV|m5V&29)G`BtyrSpmbzIXT52`2dEkWj!x zUIdLK*VN-RP*2c%D~mK1&G_Qg{#X!1YU&otR%3~KVEaz+psKz`i*utqiE^cw>=(4(_+; zBv@K;sEiPpY8OAPu~Z~Tc#U}N)=3_O3lxLItNr<)vg}!=x*c9qp7y76X|KY-8o|%j z0QX7eEUu2Q6~)CIVo(VleO!ipfiLhjuf|HaR2XXBO(K&uJJguxnyO5x?rKrIy=5@p z4fq3cG>cnT?VL7g7q#&lu>k}&DI~MI+kbE2&|m96TI(&KLCsTjEr51OPleT8zl5kJ-)6N6p=`nF(#6~PCb*vxqJ@mXpi@1sB@E&B(Mrq3r;oZ0eBGTR@o=e* zAR(#pjCSS(gE!icB6#SNUwkf_gEOk}SEOg^jE*XC8Wm=ABtNJDIHA4^HGX%rg&I{l z*U_mvf>sUFM}4)R3QPvNGPQ{@r@a-}qV5a$gp*!ojkvmchZcBPD$9pS`j~3F)VYl% zJd$8-hgq{`q#!klXB>=33Fs^Qy+l|KOC3>?n<;Cv-(LvPk)thfr!I}D+7-|Q--+aO zb%F~&agd-6!3iL`%^xzTP5Ij2Zc7rU>5Mc7;?!D0o>2(0+;b7iD z{i|LX9jXOJ6t!<1MV-3#fw1> zIX+Gt0&4I?B58C6Q3y%2!zsb()M5JUL8^YSwRyi&it0FWI>`WWF&Wl@I&iv*4w;f* z-oY3hfRy0{q(tnkq^K)7iJ7t-FgRB75R6v6rDiGfO%_?L|9JUh0s*!K55X~dTtL9> zCUi^Z^T;@DiLG@tE)5aR?LWFf}N=O)2}JPG8kO zj}D2grKS@654Dxv(JI_frp!PF@0(qcTy$Vp zg#B}`H>Kb2b(7}zt=^h_-Rf?V=vD)&bPMCV{Kq@0-92=mr+}{8D)8J_74X^zJc>%v zf4JFt%Q)0-Q24N@G%Fr}fS@*+r8@zFYQie&)^ST6np$TI)6FnWXau?KsM_q+4NBr? z?ScaFIB1YMQ1Tzvw{$Vh6Wo zB$$BAYIZt)2_5r7eIIAJmHsT947+Vnz2XZsndj@8jIi3b7t89wkBZzUwH+@+?pttY zQQ^W|*^`~Ly~CS~W7@2~VrUi+-crM}A@3q(xF3on1s(TN9V9IxO-;Hwq`ZWJa3Ywb z3L57gFd4Th1)V0EywRkOcI9v&9e&Y%sE+(r2_pE~nJSDhTM-&ij(v0Imu&ZvDuztTl?8 ze?`}A90mEeHk7qTpw_)a&d*j3uk%wQ73FO*iU3;eB*CcP9XG@agYKd;&njDMb6y)y zYrK@)v`uwlXqNn~E+@RG>JbM{&Gf=-)oCG$+7O2TaM@$wqPRIEU_t$LB0SHxMeEdX zd;24$=uTG=RMjXiDT)jbM`4(^VlDcQEFx0yUFX+S{ps#V#Ci*(THFKaxDB%ElY&H% z-MSG~notGs0WZd)VQx~2wjq!f!EwZhLt$62JuSqR_3w{)|Pi!F%xq(s`h9%Mt zM9=4T;KLpXdG3wYQ2vIyW-_XtE|GO!2u83^B4z6#1bEAm{v^-|#gJE?WA+b~fuZ93 zh@YCzeKdg1>MLXGh`Yb~HEk7r;c(DPyl&_j2kO4MS^6;RHO19!L`-216@{QpV?u+; zXp*SJpuMN6%_-V0RTSgLRZqPDDOu41;|H;V9?WpN<*L}E#L zZiS^B+VU0ovbZ*BqfTdYFYMdkmSmo-+b!*{Eu96HoI$Zd&iw3pkOhv_b;Q5u0#>dr!)rk|`2>In;nn?~ zaqE}Xv`1p#Z;*`>RH6aVqR!vzbSoKKbzPhfe0?XQUSmGN{HrlP0*+gql-+>D<(|!m zKX%j9fvTfbZwr2MO-#4m*???st z&(@(PW!1PKmI`^3Z`z_15$^fodgDoFkj3*ZsZ@4&6Vx`#UPdLGElB%DPN&l>*U1Q{ zqth8ho2pwr9&YQfYTk@UeUugPx%RBfs6QPH2cfn19RJ*ncK?=S9bzksDwVr@M(d}^ z+}7dG`jJ|r1l4ExEUS!7wR{jRGzOdlFO&==m3{oz$br9(Q+zpaxX&8+a^PNnIj}05 zPzUIP7&W$3)&PTSz zj^FE%By`Q5NlqO#ct`J5DXg$$J%a@=&|$kMCCCy~pf(1XT#s70EeI;qsi#E`ID!_J zd>PCpMrupbW#-!SDqi3_=@Ar6dUSx!_mlb5>A|407uhHOr`uP4PaIv9{p-ZhM`!;! zarCOo)w~l&uNH|g%ubu>C?h@GN*i@c=kL{%h&@wBz(>+k)R{wZMe#p{Ty$o1s3mOV zVvG*7t5;hE6`fUOrT|ZC@G{9V)UFgnR4E0gxBHfh-br|KkHSmYwE_+%iLI=MIFO1# z18s)HTTM{o&DTutWAfC<@Mg+9cQrvB`yqeC>Mgte2xCOi)~Tp=PervW=H96&i8-BK z!R?oJn@qup^mwPCbB|d?#y&TUeF7;_&nbF#$?xe|Rp&R)*12u%mZ@M{fqGJ=nKA2V zOpwk5x7`re6wd%l6^!8HxXsAYNt>9#obE0^`G`1B9|8%D1lgWjiPe^^61z^ZftYHL zaFBaF83InZn1uAco8uzR>JVb@MA^IPsU`akKwXh9gZWH}jwcTp)eSp|!lTnWmV{H&& zMLQu*v1)=IwXtEvYU$HM&LCEs>!2%fSYP|R6+;!pek@LZi?i>>->#5kqm~GkM9K3W zBYBQFbX<;v!*sd4o>nxsQh*oyt47z=QljFRov)^2{-Ia!-}Vr;>-2B4Gwu7>vSmI! zpiPfF3g;f&Q@hv4Yi1GjtjoBSVPDxnkKhtfY3f;;xvK@h=m^Ntn%w6>{L^?q2na{I zV((MfSo;>9)N*8AWh1B$3*r7LY|M8;@JD?}tVCUTgSnIpZe;=uVLp;NHM=KMS0!c!?z!^5rYJgyGFaD z=&FsIsGiZD*0@HqM$B@_XnN@0t)2fq6#2>>3`0?Ckp!zM>qVu1Jh|xD1R-VAyaa&V z&1d2b`AfRHkn7cC4koGZUE93v9uB`Pa7TrK^jU*ar5<1>z5pELjUIO0uz^=*3G8qe65!{fMMqxp8%@(~8N z&Qq1;_HFX4dicp$w|ny+LdVEqPk4Iam6Wbx(A~Z(O5d8{R+O${sOwdfu3%6_$*f<8 zkuSs$R?YlB^R@E)8U{Y(0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>CIU z4rWks$WWauNELC^DionYs1;guFdzMbCJjl7i=*ILaPVWX>fqw6tAnc`2!4RLxH>7i zNQwVT3N2zhIPS;0dyl(!0N1D}n$ITlcb2Fdk<{lV{Ut-@s7OA04|?ia`T z7zIMRK(p>R-^Y&AJOP5wz?I(iR~x|0C+YRJ7Ci#`w}Ff6wkGcZmpj1VlOdUsD+OtC zg#z$?M&FbJ25y1gHLthUK29Hi40V;d0S*p*DNub z00006VoOIv0RI600RN!9r;`8x010qNS#tmY4#5Bb4#5Gqk!$S$000McNliru;|mlG z96H<#CFuYF4(LflK~#9!?Ok7J6iFKYdZx*Q3`VnR!i06r$q;-|+^7&v_c%wCTwXVF z_;3(Jkc}^U!W{(e@j$qPz&)5dAp~I`x~J{U67UDeg;-><&e+wi4!NRQ^%!JDVAPu zTEieo;Rnu~IYazTlD@t^;&+z3efw7EW8+v{Z{QO(z{JFa5B$W$1hewg)RYhW)YKHS zEKlw0s$&Y6q`{}z1V)Ac9`HB`>QUkVUbW{NGXfhD78dx(5F`PEj>`bWD_blUjc5Uv zXYJF3X6?rzCarw@f%8ZZr8l#PLL!$5+rU-vn@#%IHnlB60umuwT3RB3Pr9Bdx6=iX ziRxNOfqIwyMiTinY_g394=#B)~x@{ePyce`*{cNCFo4006gc z-SSDoBMXw9J9lbR$0k+1taUF#2$oMDw_Ol95F`UWn%t3@4Yb)Vz@vq-S}2#xH35KE zEEX$?8-XOXF9NKn1|UuA(qwsgS;@NAp^{aG64eM@u~__QjTb-yoCj?19Ib3Roram2 z8CYFi^^dKstwB1S2G8@raU2yj3+@6>uT}WP7R&K_1+aW(8|-HE(*MWld@TQHiS7 zo12^ew!Xf;fe%HMO6BV$Tte10JkJvjdpk15j77tfyV;N@@xUC_IsgFc>+9^8;|J2R2v1uZprD(dAhowm14-E~$;^HDqPEPs&v%m)cn4Fvp)ulnjd0IywqNLqjk+Itl;)?d|PC7eeJxUA$gbR~OURo1dR| z`uh5$4Z^9ZDMzJOncm-LLUi|jA_3al+hKBYQW*GPJ){w6buV1F@PKsu>eZ`<(RZ2k z0y103NGi3KNMHi|MBKpP;o%Fx-V6|Q6{}+bsx82W2!Pc5$jC_OW|4X)4FkdR z$l5Oy3PdkJ=7ypqh@x%f)}iio#0pfhe3%}h99>?3hz-!z)`pM&T5SLmR&?A}dEBD& z;j@-~ABl?qLC|!8RnH{QO#sql&tXIW(_R1$nof}Fl>`p1+HpbSKkK{*0qUW*)FTN} zL1P2|u#AzdxS0aa3qVR07Y7M-w&}_=eD>^F|M&Il*Xs&g(IEr(G?JJ})Y)dDi6VP? zdW2R0&Cbp`rolHw0+FTMqRYKa5HImep(6jZ39xnCHxH1YHzERR5^EA%nSVH__9;P) z!(gefV(+T?epn<>aYcEW#6%R)73~?UWJbu>uLbaV4^bsc2#Ex$aR`aBS`Uc;-*tBv92L zDkO+J1gN~(3#|!6;Fn4zf2J>$O2NmEAECd$-%FANEbw(dNF4mAJu|35&~;3Zz}El= z4jd4!^yJBt(C^jNRY<4PzUp=y2V7TPx#(2=xQ#*sU01?KTX?l#pXhN_bxj-JX(ZtFXmmbmPC_XoFq6qt9V?g1)QhB2DR3MoGz6ql zDP^#93T<%+$siO7OvwhaRA2Rit9@4dBC;E(qX(?4tibyEI(VK3sZLNr z;EVphI*h>(0h*herQX&d0zQufHtd#3>doCM2BFCN3zP_e$MF(|pD%;)N9SREBxK&!l?$80g4J3%H0YpfE zgKs;~Cg%tc@oACIB*s!LLURde;Hzo?Qcpx)08el)fVJ0;^zvpC2_lkCRin)a92^{U zWaa{NE^Trg#}RqIk7(8}n*VLW*3c2owZ;obQq4zA>1JxDuSiayB$tgP>ITYc0o{fe zsa;)Lz-5v_CArPqioJm%$(>A&lQaNSfRP10$?@NsK#60w;dfMh~oi~ws1uu#%5hlRof)40Tvb(B3-Dnvs1_Y>~3jkd2f2I9+8a& zh73@m#IZ4@OlSxYT?mrNWT0Fw6PJ%i1ctgRMP$a0CZw4_90=9kpJYT+dx8iVKoJR8 zfSGXXOuoTOc4x1M@fvj*H*F?R*RCU?1_%;CL@VIL5sl2T#Pd9lL;})`-#6pqk!J#R z@4P{Pi)skhbzyC7Ep)7-ql3Ce(#YPxAdnX?USw9ha^(v5;wtLebT1brLfk>6;La-7 zbs?M0La9`$+F@m6d$>riZitxsO7bd12vMn2psA_J*8-JFrE0&W38T^_srpPN1Hr`6 zG$9QcTUk`WN0QBE{jK(Bzh!J*01l$a5Re4$wDCNt7dx@WdD$MC$z&jt$v~-8qJmG_ z+^SUrAW%iX<+*|;#&T0epbiqycJPSGt5>fem&^I!<5@{@4P!(DAW%hy03JzbpqK)T zRFBn;PG8%^o<`l@M4>!NMn%5r`~`USppsh_`z-B zyk4&(SvA!S6d3~Qi3Bp>CZP#bGmS`TfO5I)e`rP@{@JSje;n7xd${qphX>>PEO148 zJ_o z!NwewdZfCn>#)l5+9uUyJtW6*tOnSWxWNbc{U3h%`EL6m?n6fp*l`?hetf%7V_oOo zGp{-Q?RNkG@Y$!IR<*;c6Rd~VRn>AP6Ej#x004lonGBroEyIrYkEAcO@ZuBb-1{T< z7z@b4uYVajJ~#IRl>|ZXN%f+-b)+fYIBW&{ttqtMMhI}emmd5Xo5?WChycw4pER^g zfBPL%6VU3_!Z^$`RD;(uWvhhf(J6aq-_I|hG5FkW=hHO0oq#BQ>VFNT|3yUkFCPe(!hSZ+=_icbA zq(L4#2;epzQL>;U-4Pl#K*I=Zh^qRu=|1rguW;R@Z{B8G04*o4XQH~bcJmG6(U2Qh zPinbAk~$_pTm-|HWAlhsV|!2Su>opL>H+ki{2$PbEo8c{<%$3R002ovPDHLkV1nb> BW556a literal 0 HcmV?d00001 diff --git a/game/ui/theme/GameUI.png.import b/game/ui/theme/GameUI.png.import new file mode 100644 index 00000000..e782fe4a --- /dev/null +++ b/game/ui/theme/GameUI.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/GameUI.png-73e86ec1148027f9a719b18a5dba0e84.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/theme/GameUI.png" +dest_files=[ "res://.import/GameUI.png-73e86ec1148027f9a719b18a5dba0e84.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/ui/theme/actionbar_dynamicfont.tres b/game/ui/theme/actionbar_dynamicfont.tres new file mode 100644 index 00000000..cfe6cb4c --- /dev/null +++ b/game/ui/theme/actionbar_dynamicfont.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://data/fonts/VT323-Regular.ttf" type="DynamicFontData" id=1] + +[resource] +size = 21 +font_data = ExtResource( 1 ) diff --git a/game/ui/theme/bag_icon.tres b/game/ui/theme/bag_icon.tres new file mode 100644 index 00000000..5d21af3c --- /dev/null +++ b/game/ui/theme/bag_icon.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 2, 101, 12, 14 ) diff --git a/game/ui/theme/button_bg_atlas.tres b/game/ui/theme/button_bg_atlas.tres new file mode 100644 index 00000000..431a19c9 --- /dev/null +++ b/game/ui/theme/button_bg_atlas.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 1, 55, 13, 14 ) diff --git a/game/ui/theme/button_bg_stylebox.tres b/game/ui/theme/button_bg_stylebox.tres new file mode 100644 index 00000000..94886cc8 --- /dev/null +++ b/game/ui/theme/button_bg_stylebox.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/button_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 13, 14 ) +margin_left = 5.0562 +margin_right = 5.57024 +margin_top = 5.69876 +margin_bottom = 5.57024 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.772549, 0.772549, 0.772549, 1 ) diff --git a/game/ui/theme/button_bg_stylebox_disabled.tres b/game/ui/theme/button_bg_stylebox_disabled.tres new file mode 100644 index 00000000..82fdb5ce --- /dev/null +++ b/game/ui/theme/button_bg_stylebox_disabled.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/button_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 13, 14 ) +margin_left = 5.57024 +margin_right = 4.92768 +margin_top = 5.18471 +margin_bottom = 5.18471 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.984314, 0.984314, 0.984314, 1 ) diff --git a/game/ui/theme/button_bg_stylebox_focus.tres b/game/ui/theme/button_bg_stylebox_focus.tres new file mode 100644 index 00000000..91ef13d0 --- /dev/null +++ b/game/ui/theme/button_bg_stylebox_focus.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/button_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 13, 14 ) +margin_left = 5.0562 +margin_right = 4.92768 +margin_top = 5.82727 +margin_bottom = 5.0562 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.807843, 0.807843, 0.807843, 1 ) diff --git a/game/ui/theme/button_bg_stylebox_hover.tres b/game/ui/theme/button_bg_stylebox_hover.tres new file mode 100644 index 00000000..298037ac --- /dev/null +++ b/game/ui/theme/button_bg_stylebox_hover.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/button_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 13, 14 ) +margin_left = 4.15661 +margin_right = 4.79917 +margin_top = 4.67066 +margin_bottom = 4.88346 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 diff --git a/game/ui/theme/button_bg_stylebox_pressed.tres b/game/ui/theme/button_bg_stylebox_pressed.tres new file mode 100644 index 00000000..540dc110 --- /dev/null +++ b/game/ui/theme/button_bg_stylebox_pressed.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/button_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 13, 14 ) +margin_left = 3.0 +margin_right = 3.0 +margin_top = 3.0 +margin_bottom = 3.0 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.431373, 0.431373, 0.431373, 1 ) diff --git a/game/ui/theme/checkbox_checked_texture.tres b/game/ui/theme/checkbox_checked_texture.tres new file mode 100644 index 00000000..0072fe5b --- /dev/null +++ b/game/ui/theme/checkbox_checked_texture.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 9, 46, 7, 7 ) diff --git a/game/ui/theme/checkbox_texture.tres b/game/ui/theme/checkbox_texture.tres new file mode 100644 index 00000000..f0209755 --- /dev/null +++ b/game/ui/theme/checkbox_texture.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 1, 46, 7, 7 ) diff --git a/game/ui/theme/cooldown_progress.png b/game/ui/theme/cooldown_progress.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e30efc5eb892e05a9efd1b78689405f26e18d5 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}K#X;^)4C~IxyaaMs(j9#r85lP9 zbN@+X1@buyJR*x382Ao@Fyrz36)8YLUQZXt5Q*^QgoK0}>_5M8%zKI literal 0 HcmV?d00001 diff --git a/game/ui/theme/cooldown_progress.png.import b/game/ui/theme/cooldown_progress.png.import new file mode 100644 index 00000000..aad26d8f --- /dev/null +++ b/game/ui/theme/cooldown_progress.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/cooldown_progress.png-021a0cda14b9a15b9ac04b9c9084d412.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/theme/cooldown_progress.png" +dest_files=[ "res://.import/cooldown_progress.png-021a0cda14b9a15b9ac04b9c9084d412.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/game/ui/theme/dropdown_icon.tres b/game/ui/theme/dropdown_icon.tres new file mode 100644 index 00000000..04e6b899 --- /dev/null +++ b/game/ui/theme/dropdown_icon.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 1, 1, 10, 10 ) diff --git a/game/ui/theme/h_scroll_bar_texture.tres b/game/ui/theme/h_scroll_bar_texture.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/theme/h_scroll_bar_texture.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/theme/indicator.png b/game/ui/theme/indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..54d16eb870f63f14e1b8bec3d30918c5b75a403f GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_r*vAk26?e?qM z&(L5k7uNxxse+y^jv*HQYo{pk9Wsz;o#>&$)al^kqhP_rbkb44gN2i+(V?J4mZkBD zg0Qd*L*TvePm=?81>A`Hr26)C_1TQzs&hO2I%nl}Adr%ExSO6@=}5A(6w0#&ex8})j6L#v@b{V z&?EB~3g1o`aM_o>Q#n+iRT6mcNM51Rp#&i7>ZAlo#M5D`bQOjvV^iIT@E*4(_Qyvr`xvAMib wbfwbmAJbm@u-doRPy0390O(ww3&nfcJ#%;yW^J3H1q?w3Pgg&ebxsLQ0Ee`n0RR91 literal 0 HcmV?d00001 diff --git a/game/ui/theme/indicator.png.import b/game/ui/theme/indicator.png.import new file mode 100644 index 00000000..de0ce357 --- /dev/null +++ b/game/ui/theme/indicator.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/indicator.png-c41d04cbba622d9e2a8ddce8ec7447b5.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/theme/indicator.png" +dest_files=[ "res://.import/indicator.png-c41d04cbba622d9e2a8ddce8ec7447b5.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/ui/theme/lineedit_normal_style.tres b/game/ui/theme/lineedit_normal_style.tres new file mode 100644 index 00000000..836cca14 --- /dev/null +++ b/game/ui/theme/lineedit_normal_style.tres @@ -0,0 +1,15 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/button_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 13, 14 ) +margin_left = 4.54215 +margin_right = 4.92768 +margin_top = 4.54215 +margin_bottom = 4.79917 +expand_margin_top = 4.0 +expand_margin_bottom = 4.0 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 diff --git a/game/ui/theme/locked_icon.tres b/game/ui/theme/locked_icon.tres new file mode 100644 index 00000000..8b8a490d --- /dev/null +++ b/game/ui/theme/locked_icon.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 101, 12, 14 ) diff --git a/game/ui/theme/panel_bg.tres b/game/ui/theme/panel_bg.tres new file mode 100644 index 00000000..1350fef7 --- /dev/null +++ b/game/ui/theme/panel_bg.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/panel_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 10, 11 ) +margin_left = 4.0 +margin_right = 4.0 +margin_top = 4.0 +margin_bottom = 4.0 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 diff --git a/game/ui/theme/panel_bg_atlas.tres b/game/ui/theme/panel_bg_atlas.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/theme/panel_bg_atlas.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/theme/radio_checked_texture.tres b/game/ui/theme/radio_checked_texture.tres new file mode 100644 index 00000000..25bfe521 --- /dev/null +++ b/game/ui/theme/radio_checked_texture.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 1, 37, 7, 7 ) diff --git a/game/ui/theme/radio_texture.tres b/game/ui/theme/radio_texture.tres new file mode 100644 index 00000000..f3bda6d4 --- /dev/null +++ b/game/ui/theme/radio_texture.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 9, 37, 7, 7 ) diff --git a/game/ui/theme/scrollbar_bg.tres b/game/ui/theme/scrollbar_bg.tres new file mode 100644 index 00000000..fa085e52 --- /dev/null +++ b/game/ui/theme/scrollbar_bg.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/scrollbar_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 10, 11 ) +margin_left = 2.0 +margin_right = 2.0 +margin_top = 2.0 +margin_bottom = 2.0 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.976471, 0.976471, 0.976471, 1 ) diff --git a/game/ui/theme/scrollbar_bg_atlas.tres b/game/ui/theme/scrollbar_bg_atlas.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/theme/scrollbar_bg_atlas.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/theme/scrollbar_bg_focus.tres b/game/ui/theme/scrollbar_bg_focus.tres new file mode 100644 index 00000000..8a932b2f --- /dev/null +++ b/game/ui/theme/scrollbar_bg_focus.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/panel_bg_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 10, 11 ) +margin_left = 2.0 +margin_right = 2.0 +margin_top = 2.0 +margin_bottom = 2.0 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 diff --git a/game/ui/theme/scrollbar_grabber.tres b/game/ui/theme/scrollbar_grabber.tres new file mode 100644 index 00000000..ad31839f --- /dev/null +++ b/game/ui/theme/scrollbar_grabber.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/scrollbar_grabber_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 10, 11 ) +margin_left = 2.35121 +margin_right = 2.35121 +margin_top = 2.95077 +margin_bottom = 2.65099 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 diff --git a/game/ui/theme/scrollbar_grabber_atlas.tres b/game/ui/theme/scrollbar_grabber_atlas.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/theme/scrollbar_grabber_atlas.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/theme/scrollbar_grabber_highlight.tres b/game/ui/theme/scrollbar_grabber_highlight.tres new file mode 100644 index 00000000..ad31839f --- /dev/null +++ b/game/ui/theme/scrollbar_grabber_highlight.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/scrollbar_grabber_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 10, 11 ) +margin_left = 2.35121 +margin_right = 2.35121 +margin_top = 2.95077 +margin_bottom = 2.65099 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 diff --git a/game/ui/theme/scrollbar_grabber_pressed.tres b/game/ui/theme/scrollbar_grabber_pressed.tres new file mode 100644 index 00000000..ffc13825 --- /dev/null +++ b/game/ui/theme/scrollbar_grabber_pressed.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/scrollbar_grabber_atlas.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 10, 11 ) +margin_left = 2.35121 +margin_right = 2.35121 +margin_top = 2.95077 +margin_bottom = 2.65099 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.976471, 0.976471, 0.976471, 1 ) diff --git a/game/ui/theme/separator_stylebox.tres b/game/ui/theme/separator_stylebox.tres new file mode 100644 index 00000000..7bf5dd6e --- /dev/null +++ b/game/ui/theme/separator_stylebox.tres @@ -0,0 +1,7 @@ +[gd_resource type="StyleBoxTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/separator_texture.tres" type="Texture" id=1] + +[resource] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 1, 1 ) diff --git a/game/ui/theme/separator_texture.tres b/game/ui/theme/separator_texture.tres new file mode 100644 index 00000000..654816fd --- /dev/null +++ b/game/ui/theme/separator_texture.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 20, 68, 1, 1 ) diff --git a/game/ui/theme/spellbook_icon.tres b/game/ui/theme/spellbook_icon.tres new file mode 100644 index 00000000..8311c95c --- /dev/null +++ b/game/ui/theme/spellbook_icon.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 16, 101, 12, 14 ) diff --git a/game/ui/theme/ui_dynamicfont.tres b/game/ui/theme/ui_dynamicfont.tres new file mode 100644 index 00000000..d3f2869b --- /dev/null +++ b/game/ui/theme/ui_dynamicfont.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://data/fonts/VT323-Regular.ttf" type="DynamicFontData" id=1] + +[resource] +size = 14 +font_data = ExtResource( 1 ) diff --git a/game/ui/theme/ui_dynamicfont_small.tres b/game/ui/theme/ui_dynamicfont_small.tres new file mode 100644 index 00000000..80d30233 --- /dev/null +++ b/game/ui/theme/ui_dynamicfont_small.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://data/fonts/VT323-Regular.ttf" type="DynamicFontData" id=1] + +[resource] +size = 12 +font_data = ExtResource( 1 ) diff --git a/game/ui/theme/ui_theme.tres b/game/ui/theme/ui_theme.tres new file mode 100644 index 00000000..d9df2c7c --- /dev/null +++ b/game/ui/theme/ui_theme.tres @@ -0,0 +1,371 @@ +[gd_resource type="Theme" load_steps=30 format=2] + +[ext_resource path="res://ui/theme/h_scroll_bar_texture.tres" type="Texture" id=1] +[ext_resource path="res://ui/theme/button_bg_stylebox_disabled.tres" type="StyleBox" id=2] +[ext_resource path="res://ui/theme/button_bg_stylebox_focus.tres" type="StyleBox" id=3] +[ext_resource path="res://ui/theme/button_bg_stylebox.tres" type="StyleBox" id=4] +[ext_resource path="res://ui/theme/button_bg_stylebox_hover.tres" type="StyleBox" id=5] +[ext_resource path="res://ui/theme/ui_dynamicfont.tres" type="DynamicFont" id=6] +[ext_resource path="res://ui/theme/button_bg_stylebox_pressed.tres" type="StyleBox" id=7] +[ext_resource path="res://ui/theme/panel_bg.tres" type="StyleBox" id=8] +[ext_resource path="res://ui/theme/lineedit_normal_style.tres" type="StyleBox" id=9] +[ext_resource path="res://ui/theme/scrollbar_grabber_highlight.tres" type="StyleBox" id=10] +[ext_resource path="res://ui/theme/scrollbar_bg.tres" type="StyleBox" id=11] +[ext_resource path="res://ui/theme/scrollbar_grabber.tres" type="StyleBox" id=12] +[ext_resource path="res://ui/theme/scrollbar_grabber_pressed.tres" type="StyleBox" id=13] +[ext_resource path="res://ui/theme/scrollbar_bg_focus.tres" type="StyleBox" id=14] +[ext_resource path="res://ui/theme/separator_stylebox.tres" type="StyleBox" id=15] +[ext_resource path="res://ui/theme/radio_texture.tres" type="Texture" id=16] +[ext_resource path="res://ui/theme/radio_checked_texture.tres" type="Texture" id=17] +[ext_resource path="res://ui/theme/checkbox_texture.tres" type="Texture" id=18] +[ext_resource path="res://ui/theme/checkbox_checked_texture.tres" type="Texture" id=19] +[ext_resource path="res://ui/theme/dropdown_icon.tres" type="Texture" id=20] + +[sub_resource type="Image" id=1] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 97, 255, 255, 255, 135, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 114, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 139, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 96, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 255, 15, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 150, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 122, 191, 191, 191, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 122, 191, 191, 191, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 121, 191, 191, 191, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 121, 191, 191, 191, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 121, 191, 191, 191, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 120, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 120, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 120, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 119, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 119, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 119, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 97, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 118, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 139, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 97, 255, 255, 255, 135, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 150, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 16, 255, 255, 255, 150, 255, 255, 255, 134, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 97, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 255, 15, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 15, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 97, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 139, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 139, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 97, 255, 255, 255, 135, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 135, 255, 255, 255, 97, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 64, +"mipmaps": false, +"width": 64 +} + +[sub_resource type="ImageTexture" id=2] +flags = 0 +flags = 0 +image = SubResource( 1 ) +size = Vector2( 64, 64 ) + +[sub_resource type="Image" id=3] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 27, 255, 91, 91, 165, 255, 93, 93, 229, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 195, 191, 68, 68, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 26, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 210, 191, 68, 68, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 164, 255, 93, 93, 255, 255, 92, 92, 178, 255, 88, 88, 26, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 191, 70, 70, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 209, 191, 68, 68, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 228, 255, 93, 93, 255, 255, 90, 90, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 209, 191, 69, 69, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 208, 191, 68, 68, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 208, 191, 68, 68, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 207, 191, 67, 67, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 206, 191, 68, 68, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 206, 191, 69, 69, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 205, 191, 68, 68, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 205, 191, 68, 68, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 204, 191, 68, 68, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 204, 191, 68, 68, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 203, 191, 68, 68, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 228, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 202, 191, 67, 67, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 165, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 202, 191, 67, 67, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 46, 46, 27, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 190, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 191, 68, 68, 27, 255, 91, 91, 165, 255, 93, 93, 229, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 191, 70, 70, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 0, 0, 0, 0, 128, 46, 46, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 128, 46, 46, 0, 191, 68, 68, 7, 255, 92, 92, 151, 255, 92, 92, 151, 191, 68, 68, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 7, 255, 92, 92, 151, 255, 92, 92, 151, 191, 68, 68, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 255, 88, 88, 7, 255, 92, 92, 180, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 180, 191, 65, 65, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 65, 65, 7, 255, 92, 92, 180, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 180, 191, 65, 65, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 253, 255, 91, 91, 180, 255, 93, 93, 255, 255, 93, 93, 233, 255, 93, 93, 233, 255, 93, 93, 255, 255, 91, 91, 180, 191, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 7, 255, 91, 91, 180, 255, 93, 93, 255, 255, 93, 93, 233, 255, 93, 93, 233, 255, 93, 93, 255, 255, 91, 91, 180, 191, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 7, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 87, 87, 43, 255, 78, 78, 44, 255, 93, 93, 233, 255, 93, 93, 255, 255, 91, 91, 179, 191, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 7, 255, 91, 91, 179, 255, 93, 93, 255, 255, 93, 93, 233, 255, 78, 78, 44, 255, 78, 78, 44, 255, 93, 93, 233, 255, 93, 93, 255, 255, 91, 91, 179, 191, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 7, 255, 92, 92, 181, 255, 93, 93, 255, 255, 92, 92, 217, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 234, 255, 70, 70, 44, 64, 19, 19, 0, 64, 16, 16, 0, 255, 70, 70, 44, 255, 93, 93, 234, 255, 93, 93, 255, 255, 92, 92, 178, 191, 65, 65, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 65, 65, 6, 255, 92, 92, 178, 255, 93, 93, 255, 255, 93, 93, 234, 255, 70, 70, 44, 64, 16, 16, 0, 64, 16, 16, 0, 255, 70, 70, 44, 255, 93, 93, 234, 255, 93, 93, 255, 255, 92, 92, 178, 191, 65, 65, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 7, 255, 91, 91, 180, 255, 93, 93, 255, 255, 93, 93, 233, 255, 87, 87, 43, 64, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 93, 93, 219, 255, 93, 93, 232, 255, 71, 71, 45, 128, 37, 37, 0, 191, 69, 69, 9, 191, 68, 68, 8, 128, 37, 37, 0, 255, 71, 71, 45, 255, 93, 93, 234, 255, 93, 93, 255, 255, 91, 91, 177, 191, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 6, 255, 91, 91, 178, 255, 93, 93, 255, 255, 93, 93, 234, 255, 71, 71, 45, 128, 37, 37, 0, 191, 69, 69, 8, 191, 69, 69, 8, 128, 37, 37, 0, 255, 71, 71, 45, 255, 93, 93, 234, 255, 93, 93, 255, 255, 91, 91, 177, 191, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 7, 255, 91, 91, 179, 255, 93, 93, 255, 255, 93, 93, 234, 255, 70, 70, 44, 64, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 11, 191, 68, 68, 11, 128, 26, 26, 0, 255, 87, 87, 43, 255, 93, 93, 230, 255, 93, 93, 230, 255, 87, 87, 42, 128, 25, 25, 0, 255, 61, 61, 45, 255, 93, 93, 234, 255, 93, 93, 255, 255, 91, 91, 176, 191, 66, 66, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 6, 255, 91, 91, 176, 255, 93, 93, 255, 255, 93, 93, 234, 255, 61, 61, 45, 128, 25, 25, 0, 255, 87, 87, 43, 255, 93, 93, 230, 255, 93, 93, 230, 255, 87, 87, 42, 128, 25, 25, 0, 255, 61, 61, 45, 255, 93, 93, 234, 255, 93, 93, 255, 255, 91, 91, 176, 191, 66, 66, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 6, 255, 91, 91, 178, 255, 93, 93, 255, 255, 93, 93, 234, 255, 71, 71, 45, 64, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 255, 23, 23, 42, 255, 93, 93, 232, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 232, 255, 23, 23, 42, 128, 13, 13, 0, 255, 61, 61, 46, 255, 93, 93, 235, 255, 93, 93, 255, 255, 92, 92, 176, 191, 69, 69, 6, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 6, 255, 92, 92, 176, 255, 93, 93, 255, 255, 93, 93, 235, 255, 61, 61, 46, 128, 13, 13, 0, 255, 23, 23, 42, 255, 93, 93, 232, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 232, 255, 23, 23, 42, 128, 13, 13, 0, 255, 61, 61, 46, 255, 93, 93, 235, 255, 93, 93, 255, 255, 92, 92, 176, 191, 69, 69, 6, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 6, 255, 91, 91, 178, 255, 93, 93, 255, 255, 93, 93, 234, 255, 66, 66, 45, 128, 37, 37, 0, 191, 68, 68, 10, 191, 69, 69, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 255, 23, 23, 41, 255, 93, 93, 232, 255, 93, 93, 255, 255, 92, 92, 182, 255, 92, 92, 182, 255, 93, 93, 255, 255, 93, 93, 232, 255, 23, 23, 41, 128, 13, 13, 0, 255, 74, 74, 47, 255, 93, 93, 235, 255, 93, 93, 255, 255, 92, 92, 175, 191, 68, 68, 6, 191, 68, 68, 6, 255, 92, 92, 175, 255, 93, 93, 255, 255, 93, 93, 235, 255, 74, 74, 47, 128, 13, 13, 0, 255, 23, 23, 41, 255, 93, 93, 232, 255, 93, 93, 255, 255, 92, 92, 182, 255, 92, 92, 182, 255, 93, 93, 255, 255, 93, 93, 232, 255, 23, 23, 41, 128, 13, 13, 0, 255, 74, 74, 47, 255, 93, 93, 235, 255, 93, 93, 255, 255, 92, 92, 175, 191, 68, 68, 6, 191, 65, 65, 6, 255, 91, 91, 177, 255, 93, 93, 255, 255, 93, 93, 235, 255, 61, 61, 46, 128, 23, 23, 0, 255, 87, 87, 43, 255, 93, 93, 231, 255, 92, 92, 219, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 255, 23, 23, 41, 255, 93, 93, 231, 255, 93, 93, 255, 255, 90, 90, 183, 191, 66, 66, 7, 191, 66, 66, 7, 255, 90, 90, 183, 255, 93, 93, 255, 255, 93, 93, 231, 255, 23, 23, 41, 128, 21, 21, 0, 255, 87, 87, 47, 255, 93, 93, 236, 255, 93, 93, 255, 255, 91, 91, 174, 255, 91, 91, 174, 255, 93, 93, 255, 255, 93, 93, 236, 255, 87, 87, 47, 128, 21, 21, 0, 255, 23, 23, 41, 255, 93, 93, 231, 255, 93, 93, 255, 255, 90, 90, 183, 191, 66, 66, 7, 191, 66, 66, 7, 255, 90, 90, 183, 255, 93, 93, 255, 255, 93, 93, 231, 255, 23, 23, 41, 128, 21, 21, 0, 255, 87, 87, 47, 255, 93, 93, 236, 255, 93, 93, 255, 255, 91, 91, 174, 255, 92, 92, 176, 255, 93, 93, 255, 255, 93, 93, 235, 255, 61, 61, 46, 128, 13, 13, 0, 255, 23, 23, 42, 255, 93, 93, 232, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 93, 93, 216, 255, 93, 93, 255, 255, 91, 91, 184, 191, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 8, 255, 91, 91, 184, 255, 93, 93, 255, 255, 93, 93, 231, 255, 23, 23, 40, 128, 21, 21, 0, 255, 87, 87, 48, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 236, 255, 87, 87, 48, 128, 21, 21, 0, 255, 23, 23, 40, 255, 93, 93, 231, 255, 93, 93, 255, 255, 91, 91, 184, 191, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 8, 255, 91, 91, 184, 255, 93, 93, 255, 255, 93, 93, 231, 255, 23, 23, 40, 128, 21, 21, 0, 255, 87, 87, 48, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 236, 255, 87, 87, 47, 128, 17, 17, 0, 255, 23, 23, 41, 255, 93, 93, 232, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 191, 65, 65, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 8, 255, 92, 92, 184, 255, 93, 93, 255, 255, 93, 93, 231, 255, 23, 23, 39, 128, 20, 20, 0, 255, 77, 77, 48, 255, 93, 93, 233, 255, 93, 93, 233, 255, 77, 77, 48, 128, 20, 20, 0, 255, 23, 23, 40, 255, 93, 93, 231, 255, 93, 93, 255, 255, 92, 92, 184, 191, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 64, 64, 8, 255, 92, 92, 184, 255, 93, 93, 255, 255, 93, 93, 231, 255, 23, 23, 39, 128, 20, 20, 0, 255, 77, 77, 48, 255, 93, 93, 233, 255, 93, 93, 233, 255, 87, 87, 48, 128, 21, 21, 0, 255, 23, 23, 41, 255, 93, 93, 231, 255, 93, 93, 255, 255, 92, 92, 182, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 8, 255, 92, 92, 185, 255, 93, 93, 255, 255, 93, 93, 230, 191, 69, 69, 39, 64, 18, 18, 0, 191, 66, 66, 9, 191, 66, 66, 9, 64, 18, 18, 0, 191, 69, 69, 39, 255, 93, 93, 230, 255, 93, 93, 255, 255, 92, 92, 185, 191, 66, 66, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 8, 255, 92, 92, 185, 255, 93, 93, 255, 255, 93, 93, 230, 191, 69, 69, 39, 64, 18, 18, 0, 191, 66, 66, 9, 191, 66, 66, 9, 128, 21, 21, 0, 255, 23, 23, 40, 255, 93, 93, 231, 255, 93, 93, 255, 255, 90, 90, 183, 255, 89, 89, 7, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 8, 255, 92, 92, 186, 255, 93, 93, 255, 255, 93, 93, 230, 191, 68, 68, 38, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 38, 255, 93, 93, 230, 255, 93, 93, 255, 255, 92, 92, 186, 191, 69, 69, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 8, 255, 92, 92, 186, 255, 93, 93, 255, 255, 93, 93, 230, 191, 68, 68, 38, 0, 0, 0, 0, 64, 0, 0, 0, 255, 23, 23, 40, 255, 93, 93, 231, 255, 93, 93, 255, 255, 91, 91, 184, 191, 64, 64, 8, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 67, 67, 9, 255, 91, 91, 186, 255, 93, 93, 255, 255, 93, 93, 229, 191, 68, 68, 38, 191, 69, 69, 38, 255, 93, 93, 229, 255, 93, 93, 255, 255, 91, 91, 186, 191, 67, 67, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 67, 67, 9, 255, 91, 91, 186, 255, 93, 93, 255, 255, 93, 93, 229, 191, 68, 68, 38, 191, 69, 69, 39, 255, 93, 93, 230, 255, 93, 93, 255, 255, 92, 92, 184, 191, 64, 64, 8, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 9, 255, 92, 92, 187, 255, 93, 93, 255, 255, 93, 93, 229, 255, 93, 93, 229, 255, 93, 93, 255, 255, 92, 92, 187, 191, 68, 68, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 9, 255, 92, 92, 187, 255, 93, 93, 255, 255, 93, 93, 229, 255, 93, 93, 230, 255, 93, 93, 255, 255, 92, 92, 185, 191, 66, 66, 8, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 9, 255, 92, 92, 188, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 188, 191, 69, 69, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 9, 255, 92, 92, 188, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 186, 191, 69, 69, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 10, 255, 92, 92, 154, 255, 92, 92, 154, 191, 66, 66, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 66, 66, 10, 255, 92, 92, 154, 255, 92, 92, 153, 191, 68, 68, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 228, 255, 93, 93, 255, 255, 90, 90, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 90, 90, 26, 255, 93, 93, 255, 255, 92, 92, 228, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 165, 255, 93, 93, 255, 255, 92, 92, 178, 255, 88, 88, 26, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 46, 46, 0, 255, 88, 88, 26, 255, 92, 92, 178, 255, 93, 93, 255, 255, 92, 92, 165, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 46, 46, 27, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 236, 255, 46, 46, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 191, 68, 68, 27, 255, 91, 91, 165, 255, 93, 93, 229, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 229, 255, 91, 91, 165, 191, 68, 68, 27, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 46, 46, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 64, +"mipmaps": false, +"width": 64 +} + +[sub_resource type="ImageTexture" id=4] +flags = 0 +flags = 0 +image = SubResource( 3 ) +size = Vector2( 64, 64 ) + +[sub_resource type="Image" id=5] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 27, 255, 91, 91, 165, 255, 93, 93, 229, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 195, 191, 68, 68, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 26, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 210, 191, 69, 69, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 164, 255, 93, 93, 255, 255, 90, 90, 179, 255, 87, 87, 26, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 191, 70, 70, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 209, 191, 68, 68, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 228, 255, 93, 93, 255, 255, 89, 89, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 209, 191, 69, 69, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 208, 191, 68, 68, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 208, 191, 68, 68, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 207, 191, 68, 68, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 206, 191, 68, 68, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 206, 191, 69, 69, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 205, 191, 68, 68, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 205, 191, 68, 68, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 204, 191, 68, 68, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 203, 191, 68, 68, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 203, 191, 68, 68, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 228, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 202, 191, 67, 67, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 165, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 202, 191, 67, 67, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 46, 46, 27, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 189, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 191, 68, 68, 27, 255, 91, 91, 165, 255, 93, 93, 229, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 191, 70, 70, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 255, 92, 92, 184, 255, 92, 92, 200, 191, 67, 67, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 15, 255, 92, 92, 191, 255, 91, 91, 183, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 255, 92, 92, 184, 255, 92, 92, 200, 191, 67, 67, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 15, 255, 92, 92, 191, 255, 91, 91, 183, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 197, 255, 93, 93, 255, 255, 92, 92, 188, 191, 66, 66, 6, 0, 0, 0, 0, 191, 66, 66, 6, 255, 92, 92, 188, 255, 93, 93, 255, 255, 92, 92, 197, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 197, 255, 93, 93, 255, 255, 92, 92, 188, 191, 66, 66, 6, 0, 0, 0, 0, 191, 66, 66, 6, 255, 92, 92, 188, 255, 93, 93, 255, 255, 92, 92, 197, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 30, 255, 93, 93, 229, 255, 93, 93, 255, 255, 91, 91, 161, 255, 85, 85, 2, 255, 91, 91, 161, 255, 93, 93, 255, 255, 93, 93, 229, 191, 69, 69, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 69, 69, 30, 255, 93, 93, 229, 255, 93, 93, 255, 255, 91, 91, 161, 255, 85, 85, 2, 255, 91, 91, 161, 255, 93, 93, 255, 255, 93, 93, 229, 191, 69, 69, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 21, 21, 0, 255, 89, 89, 48, 255, 93, 93, 242, 255, 93, 93, 255, 255, 92, 92, 201, 255, 93, 93, 255, 255, 93, 93, 242, 255, 89, 89, 48, 64, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 21, 21, 0, 255, 89, 89, 48, 255, 93, 93, 242, 255, 93, 93, 255, 255, 92, 92, 201, 255, 93, 93, 255, 255, 93, 93, 242, 255, 89, 89, 48, 64, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 23, 0, 255, 90, 90, 72, 255, 93, 93, 251, 255, 93, 93, 255, 255, 93, 93, 251, 255, 90, 90, 72, 64, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 23, 0, 255, 90, 90, 72, 255, 93, 93, 251, 255, 93, 93, 255, 255, 93, 93, 251, 255, 90, 90, 72, 64, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 22, 22, 0, 255, 90, 90, 71, 255, 93, 93, 250, 255, 93, 93, 255, 255, 93, 93, 250, 255, 90, 90, 71, 64, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 22, 22, 0, 255, 90, 90, 71, 255, 93, 93, 250, 255, 93, 93, 255, 255, 93, 93, 250, 255, 90, 90, 71, 64, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 21, 21, 0, 255, 87, 87, 47, 255, 93, 93, 242, 255, 93, 93, 255, 255, 92, 92, 203, 255, 93, 93, 255, 255, 93, 93, 242, 255, 87, 87, 47, 64, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 21, 21, 0, 255, 87, 87, 47, 255, 93, 93, 242, 255, 93, 93, 255, 255, 92, 92, 203, 255, 93, 93, 255, 255, 93, 93, 242, 255, 87, 87, 47, 64, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 29, 255, 93, 93, 228, 255, 93, 93, 255, 255, 92, 92, 162, 255, 87, 87, 2, 255, 92, 92, 162, 255, 93, 93, 255, 255, 93, 93, 228, 191, 68, 68, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 68, 68, 29, 255, 93, 93, 228, 255, 93, 93, 255, 255, 92, 92, 162, 255, 87, 87, 2, 255, 92, 92, 162, 255, 93, 93, 255, 255, 93, 93, 228, 191, 68, 68, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 196, 255, 93, 93, 255, 255, 91, 91, 189, 191, 67, 67, 6, 0, 0, 0, 0, 191, 66, 66, 6, 255, 91, 91, 189, 255, 93, 93, 255, 255, 92, 92, 196, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 196, 255, 93, 93, 255, 255, 91, 91, 189, 191, 67, 67, 6, 0, 0, 0, 0, 191, 66, 66, 6, 255, 91, 91, 189, 255, 93, 93, 255, 255, 92, 92, 196, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 255, 92, 92, 180, 255, 92, 92, 194, 191, 67, 67, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 67, 67, 16, 255, 92, 92, 194, 255, 92, 92, 180, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 255, 92, 92, 180, 255, 92, 92, 194, 191, 67, 67, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 67, 67, 16, 255, 92, 92, 194, 255, 92, 92, 180, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 255, 92, 92, 179, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 179, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 255, 91, 91, 179, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 91, 91, 179, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 47, 47, 0, 128, 47, 47, 0, 191, 70, 70, 0, 255, 93, 93, 255, 255, 93, 93, 255, 191, 70, 70, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 191, 70, 70, 0, 255, 93, 93, 255, 255, 93, 93, 255, 191, 70, 70, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 93, 93, 241, 255, 93, 93, 255, 255, 90, 90, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 90, 90, 23, 255, 93, 93, 255, 255, 93, 93, 241, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 189, 255, 93, 93, 255, 255, 92, 92, 115, 64, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 23, 0, 255, 92, 92, 115, 255, 93, 93, 255, 255, 92, 92, 189, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 21, 21, 0, 255, 89, 89, 60, 255, 93, 93, 253, 255, 93, 93, 248, 255, 91, 91, 115, 255, 91, 91, 25, 255, 91, 91, 25, 255, 91, 91, 115, 255, 93, 93, 248, 255, 93, 93, 253, 255, 89, 89, 60, 64, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 23, 0, 255, 92, 92, 120, 255, 93, 93, 253, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 253, 255, 92, 92, 120, 64, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 23, 0, 255, 57, 57, 60, 255, 92, 92, 190, 255, 93, 93, 242, 255, 93, 93, 242, 255, 92, 92, 190, 255, 57, 57, 60, 64, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 128, 46, 46, 0, 128, 46, 46, 0, 128, 46, 46, 0, 128, 46, 46, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 47, 47, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 93, 93, 255, 255, 93, 93, 255, 128, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 228, 255, 93, 93, 255, 255, 90, 90, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 91, 91, 27, 255, 93, 93, 255, 255, 92, 92, 228, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 46, 46, 0, 255, 92, 92, 165, 255, 93, 93, 255, 255, 92, 92, 178, 255, 88, 88, 26, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 46, 46, 0, 255, 91, 91, 26, 255, 92, 92, 178, 255, 93, 93, 255, 255, 92, 92, 165, 128, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 46, 46, 27, 255, 93, 93, 236, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 236, 255, 46, 46, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 191, 68, 68, 27, 255, 91, 91, 165, 255, 93, 93, 229, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 229, 255, 91, 91, 165, 191, 68, 68, 27, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 45, 45, 0, 128, 46, 46, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 47, 47, 0, 128, 46, 46, 0, 128, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 64, +"mipmaps": false, +"width": 64 +} + +[sub_resource type="ImageTexture" id=6] +flags = 0 +flags = 0 +image = SubResource( 5 ) +size = Vector2( 64, 64 ) + +[sub_resource type="Image" id=7] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 98, 98, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 28, 222, 222, 222, 166, 224, 224, 224, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 238, 210, 210, 210, 137, 150, 150, 150, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 28, 224, 224, 224, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 145, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 222, 222, 222, 165, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 251, 220, 220, 220, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 228, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 181, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 189, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 189, 167, 167, 167, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 229, 222, 222, 222, 166, 166, 166, 166, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 236, 111, 111, 111, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 165, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 228, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 228, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 164, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 165, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 35, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 236, 111, 111, 111, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 0, 212, 212, 212, 35, 222, 222, 222, 167, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 229, 222, 222, 222, 166, 166, 166, 166, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 64, +"mipmaps": false, +"width": 64 +} + +[sub_resource type="ImageTexture" id=8] +flags = 0 +flags = 0 +image = SubResource( 7 ) +size = Vector2( 64, 64 ) + +[sub_resource type="StyleBoxTexture" id=9] +texture = ExtResource( 1 ) +region_rect = Rect2( 0, 0, 25, 3 ) +margin_right = 10.0 +axis_stretch_horizontal = 2 +axis_stretch_vertical = 2 +modulate_color = Color( 0.890196, 0.976471, 0.992157, 1 ) + +[resource] +default_font = ExtResource( 6 ) +Button/colors/font_color = Color( 1, 1, 1, 1 ) +Button/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) +Button/colors/font_color_hover = Color( 0.941176, 0.941176, 0.941176, 1 ) +Button/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +Button/constants/hseparation = 0 +Button/fonts/font = null +Button/styles/disabled = ExtResource( 2 ) +Button/styles/focus = ExtResource( 3 ) +Button/styles/hover = ExtResource( 5 ) +Button/styles/normal = ExtResource( 4 ) +Button/styles/pressed = ExtResource( 7 ) +CheckBox/colors/font_color = Color( 0.878431, 0.878431, 0.878431, 1 ) +CheckBox/colors/font_color_disabled = Color( 0.901961, 0.901961, 0.901961, 0.2 ) +CheckBox/colors/font_color_hover = Color( 0.941176, 0.941176, 0.941176, 1 ) +CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) +CheckBox/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +CheckBox/constants/check_vadjust = 0 +CheckBox/constants/hseparation = 4 +CheckBox/fonts/font = null +CheckBox/icons/checked = ExtResource( 19 ) +CheckBox/icons/radio_checked = ExtResource( 17 ) +CheckBox/icons/radio_unchecked = ExtResource( 16 ) +CheckBox/icons/unchecked = ExtResource( 18 ) +CheckBox/styles/disabled = ExtResource( 4 ) +CheckBox/styles/focus = ExtResource( 3 ) +CheckBox/styles/hover = null +CheckBox/styles/hover_pressed = null +CheckBox/styles/normal = ExtResource( 4 ) +CheckBox/styles/pressed = ExtResource( 4 ) +CheckButton/colors/font_color = Color( 0.878431, 0.878431, 0.878431, 1 ) +CheckButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) +CheckButton/colors/font_color_hover = Color( 0.941176, 0.941176, 0.941176, 1 ) +CheckButton/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) +CheckButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +CheckButton/constants/check_vadjust = 0 +CheckButton/constants/hseparation = 4 +CheckButton/fonts/font = null +CheckButton/icons/off = ExtResource( 18 ) +CheckButton/icons/on = ExtResource( 19 ) +CheckButton/styles/disabled = ExtResource( 2 ) +CheckButton/styles/focus = ExtResource( 3 ) +CheckButton/styles/hover = ExtResource( 5 ) +CheckButton/styles/hover_pressed = ExtResource( 5 ) +CheckButton/styles/normal = ExtResource( 4 ) +CheckButton/styles/pressed = ExtResource( 7 ) +Dialogs/constants/button_margin = 64 +Dialogs/constants/margin = 16 +EditorIcons/icons/FileBigThumb = SubResource( 2 ) +EditorIcons/icons/FileBrokenBigThumb = SubResource( 4 ) +EditorIcons/icons/FileDeadBigThumb = SubResource( 6 ) +EditorIcons/icons/FolderBigThumb = SubResource( 8 ) +GridContainer/colors/PanelContainer = Color( 1, 1, 1, 1 ) +HScrollBar/icons/decrement = null +HScrollBar/icons/decrement_highlight = null +HScrollBar/icons/increment = null +HScrollBar/icons/increment_highlight = null +HScrollBar/styles/GridContainer = SubResource( 9 ) +HScrollBar/styles/grabber = ExtResource( 12 ) +HScrollBar/styles/grabber_highlight = ExtResource( 10 ) +HScrollBar/styles/grabber_pressed = ExtResource( 13 ) +HScrollBar/styles/scroll = ExtResource( 11 ) +HScrollBar/styles/scroll_focus = null +ItemList/colors/font_color = Color( 0.63, 0.63, 0.63, 1 ) +ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 ) +ItemList/colors/guide_color = Color( 0, 0, 0, 0.1 ) +ItemList/constants/hseparation = 4 +ItemList/constants/icon_margin = 4 +ItemList/constants/line_separation = 4 +ItemList/constants/vseparation = 2 +ItemList/fonts/font = null +ItemList/styles/bg = ExtResource( 8 ) +ItemList/styles/bg_focus = ExtResource( 14 ) +ItemList/styles/cursor = null +ItemList/styles/cursor_unfocused = null +ItemList/styles/selected = null +ItemList/styles/selected_focus = null +LineEdit/colors/clear_button_color = Color( 0.878431, 0.878431, 0.878431, 1 ) +LineEdit/colors/clear_button_color_pressed = Color( 1, 1, 1, 1 ) +LineEdit/colors/cursor_color = Color( 0.941176, 0.941176, 0.941176, 1 ) +LineEdit/colors/font_color = Color( 0.878431, 0.878431, 0.878431, 1 ) +LineEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) +LineEdit/colors/selection_color = Color( 0.490196, 0.490196, 0.490196, 1 ) +LineEdit/constants/minimum_spaces = 24 +LineEdit/fonts/font = null +LineEdit/icons/clear = null +LineEdit/styles/focus = ExtResource( 3 ) +LineEdit/styles/normal = ExtResource( 9 ) +LineEdit/styles/read_only = ExtResource( 2 ) +OptionButton/colors/font_color = Color( 0.88, 0.88, 0.88, 1 ) +OptionButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) +OptionButton/colors/font_color_hover = Color( 0.94, 0.94, 0.94, 1 ) +OptionButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +OptionButton/constants/arrow_margin = 4 +OptionButton/constants/hseparation = 4 +OptionButton/fonts/font = null +OptionButton/icons/arrow = ExtResource( 20 ) +OptionButton/styles/disabled = ExtResource( 2 ) +OptionButton/styles/focus = ExtResource( 3 ) +OptionButton/styles/hover = ExtResource( 5 ) +OptionButton/styles/normal = ExtResource( 4 ) +OptionButton/styles/pressed = ExtResource( 7 ) +Panel/styles/panel = ExtResource( 8 ) +PanelContainer/styles/panel = ExtResource( 8 ) +PopupMenu/colors/font_color = Color( 0.88, 0.88, 0.88, 1 ) +PopupMenu/colors/font_color_accel = Color( 0.7, 0.7, 0.7, 0.8 ) +PopupMenu/colors/font_color_disabled = Color( 0.4, 0.4, 0.4, 0.8 ) +PopupMenu/colors/font_color_hover = Color( 0.88, 0.88, 0.88, 1 ) +PopupMenu/constants/hseparation = 8 +PopupMenu/constants/vseparation = 8 +PopupMenu/fonts/font = null +PopupMenu/icons/checked = null +PopupMenu/icons/radio_checked = ExtResource( 17 ) +PopupMenu/icons/radio_unchecked = ExtResource( 16 ) +PopupMenu/icons/submenu = null +PopupMenu/icons/unchecked = null +PopupMenu/styles/hover = ExtResource( 5 ) +PopupMenu/styles/labeled_separator_left = null +PopupMenu/styles/labeled_separator_right = null +PopupMenu/styles/panel = ExtResource( 8 ) +PopupMenu/styles/panel_disabled = ExtResource( 2 ) +PopupMenu/styles/separator = ExtResource( 15 ) +PopupPanel/styles/panel = ExtResource( 8 ) +ProgressBar/colors/font_color = Color( 0.941176, 0.941176, 0.941176, 1 ) +ProgressBar/colors/font_color_shadow = Color( 0, 0, 0, 1 ) +ProgressBar/fonts/font = null +ProgressBar/styles/bg = ExtResource( 11 ) +ProgressBar/styles/fg = ExtResource( 12 ) +TabContainer/colors/font_color_bg = Color( 0.69, 0.69, 0.69, 1 ) +TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) +TabContainer/colors/font_color_fg = Color( 0.94, 0.94, 0.94, 1 ) +TabContainer/constants/hseparation = 8 +TabContainer/constants/label_valign_bg = 4 +TabContainer/constants/label_valign_fg = 0 +TabContainer/constants/side_margin = 16 +TabContainer/constants/top_margin = 48 +TabContainer/fonts/font = null +TabContainer/icons/decrement = null +TabContainer/icons/decrement_highlight = null +TabContainer/icons/increment = null +TabContainer/icons/increment_highlight = null +TabContainer/icons/menu = null +TabContainer/icons/menu_highlight = null +TabContainer/styles/panel = ExtResource( 8 ) +TabContainer/styles/tab_bg = ExtResource( 4 ) +TabContainer/styles/tab_disabled = ExtResource( 5 ) +TabContainer/styles/tab_fg = ExtResource( 3 ) +Tabs/colors/font_color_bg = Color( 0.69, 0.69, 0.69, 1 ) +Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) +Tabs/colors/font_color_fg = Color( 0.94, 0.94, 0.94, 1 ) +Tabs/constants/hseparation = 8 +Tabs/constants/label_valign_bg = 4 +Tabs/constants/label_valign_fg = 0 +Tabs/constants/top_margin = 48 +Tabs/fonts/font = null +Tabs/icons/close = null +Tabs/icons/decrement = null +Tabs/icons/decrement_highlight = null +Tabs/icons/increment = null +Tabs/icons/increment_highlight = null +Tabs/styles/button = ExtResource( 4 ) +Tabs/styles/button_pressed = ExtResource( 7 ) +Tabs/styles/panel = ExtResource( 8 ) +Tabs/styles/tab_bg = ExtResource( 4 ) +Tabs/styles/tab_disabled = ExtResource( 2 ) +Tabs/styles/tab_fg = ExtResource( 8 ) +TextEdit/colors/background_color = Color( 0, 0, 0, 1 ) +TextEdit/colors/bookmark_color = Color( 0.08, 0.49, 0.98, 1 ) +TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 ) +TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 ) +TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) +TextEdit/colors/caret_color = Color( 0.88, 0.88, 0.88, 1 ) +TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 ) +TextEdit/colors/completion_background_color = Color( 0.17, 0.16, 0.2, 1 ) +TextEdit/colors/completion_existing_color = Color( 0.87, 0.87, 0.87, 0.13 ) +TextEdit/colors/completion_font_color = Color( 0.67, 0.67, 0.67, 1 ) +TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 ) +TextEdit/colors/completion_selected_color = Color( 0.26, 0.26, 0.27, 1 ) +TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 ) +TextEdit/colors/executing_line_color = Color( 0.2, 0.8, 0.2, 0.4 ) +TextEdit/colors/font_color = Color( 0.88, 0.88, 0.88, 1 ) +TextEdit/colors/font_color_readonly = Color( 0.88, 0.88, 0.88, 0.5 ) +TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) +TextEdit/colors/function_color = Color( 0.4, 0.64, 0.81, 1 ) +TextEdit/colors/line_number_color = Color( 0.67, 0.67, 0.67, 0.4 ) +TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 ) +TextEdit/colors/member_variable_color = Color( 0.9, 0.31, 0.35, 1 ) +TextEdit/colors/number_color = Color( 0.92, 0.58, 0.2, 1 ) +TextEdit/colors/safe_line_number_color = Color( 0.67, 0.78, 0.67, 0.6 ) +TextEdit/colors/selection_color = Color( 0.49, 0.49, 0.49, 1 ) +TextEdit/colors/symbol_color = Color( 0.94, 0.94, 0.94, 1 ) +TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 ) +TextEdit/constants/completion_lines = 7 +TextEdit/constants/completion_max_width = 50 +TextEdit/constants/completion_scroll_width = 3 +TextEdit/constants/line_spacing = 8 +TextEdit/fonts/font = null +TextEdit/icons/fold = null +TextEdit/icons/folded = null +TextEdit/icons/space = null +TextEdit/icons/tab = null +TextEdit/styles/completion = ExtResource( 3 ) +TextEdit/styles/focus = ExtResource( 3 ) +TextEdit/styles/normal = ExtResource( 8 ) +TextEdit/styles/read_only = ExtResource( 2 ) +ToolButton/colors/font_color = Color( 0.88, 0.88, 0.88, 1 ) +ToolButton/colors/font_color_disabled = Color( 0.9, 0.95, 1, 0.3 ) +ToolButton/colors/font_color_hover = Color( 0.94, 0.94, 0.94, 1 ) +ToolButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +ToolButton/constants/hseparation = 3 +ToolButton/fonts/font = null +ToolButton/styles/disabled = ExtResource( 2 ) +ToolButton/styles/focus = ExtResource( 3 ) +ToolButton/styles/hover = ExtResource( 5 ) +ToolButton/styles/normal = ExtResource( 4 ) +ToolButton/styles/pressed = ExtResource( 7 ) +TooltipLabel/colors/font_color = Color( 1, 1, 1, 1 ) +TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 ) +TooltipLabel/constants/shadow_offset_x = 1 +TooltipLabel/constants/shadow_offset_y = 1 +TooltipLabel/fonts/font = null +TooltipPanel/styles/panel = ExtResource( 8 ) +Tree/colors/cursor_color = Color( 0, 0, 0, 1 ) +Tree/colors/custom_button_font_highlight = Color( 0.94, 0.94, 0.94, 1 ) +Tree/colors/drop_position_color = Color( 1, 0.3, 0.2, 1 ) +Tree/colors/font_color = Color( 0.69, 0.69, 0.69, 1 ) +Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) +Tree/colors/guide_color = Color( 0, 0, 0, 0.1 ) +Tree/colors/relationship_line_color = Color( 0.27, 0.27, 0.27, 1 ) +Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 ) +Tree/colors/title_button_color = Color( 0.88, 0.88, 0.88, 1 ) +Tree/constants/button_margin = 8 +Tree/constants/draw_guides = 1 +Tree/constants/draw_relationship_lines = 0 +Tree/constants/hseparation = 8 +Tree/constants/item_margin = 24 +Tree/constants/scroll_border = 4 +Tree/constants/scroll_speed = 12 +Tree/constants/vseparation = 8 +Tree/fonts/font = null +Tree/fonts/title_button_font = null +Tree/icons/arrow = null +Tree/icons/arrow_collapsed = null +Tree/icons/checked = null +Tree/icons/select_arrow = null +Tree/icons/unchecked = null +Tree/icons/updown = null +Tree/styles/bg = ExtResource( 8 ) +Tree/styles/bg_focus = null +Tree/styles/button_pressed = null +Tree/styles/cursor = null +Tree/styles/cursor_unfocused = null +Tree/styles/custom_button = null +Tree/styles/custom_button_hover = null +Tree/styles/custom_button_pressed = null +Tree/styles/selected = null +Tree/styles/selected_focus = null +Tree/styles/title_button_hover = null +Tree/styles/title_button_normal = null +Tree/styles/title_button_pressed = null +VBoxContainer/constants/separation = 8 +VScrollBar/icons/decrement = null +VScrollBar/icons/decrement_highlight = null +VScrollBar/icons/increment = null +VScrollBar/icons/increment_highlight = null +VScrollBar/styles/grabber = ExtResource( 12 ) +VScrollBar/styles/grabber_highlight = ExtResource( 10 ) +VScrollBar/styles/grabber_pressed = ExtResource( 13 ) +VScrollBar/styles/scroll = ExtResource( 11 ) +VScrollBar/styles/scroll_focus = ExtResource( 14 ) +WindowDialog/colors/title_color = Color( 0, 0, 0, 1 ) +WindowDialog/constants/close_h_ofs = 36 +WindowDialog/constants/close_v_ofs = 36 +WindowDialog/constants/scaleborder_size = 8 +WindowDialog/constants/title_height = 40 +WindowDialog/fonts/title_font = null +WindowDialog/icons/close = null +WindowDialog/icons/close_highlight = null +WindowDialog/styles/panel = ExtResource( 8 ) diff --git a/game/ui/theme/unlocked_icon.tres b/game/ui/theme/unlocked_icon.tres new file mode 100644 index 00000000..439f3566 --- /dev/null +++ b/game/ui/theme/unlocked_icon.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 45, 101, 12, 14 ) diff --git a/game/ui/theme/window_bg_atlas.tres b/game/ui/theme/window_bg_atlas.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/theme/window_bg_atlas.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/theme/window_bg_bg.tres b/game/ui/theme/window_bg_bg.tres new file mode 100644 index 00000000..9b0e3efa --- /dev/null +++ b/game/ui/theme/window_bg_bg.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://ui/theme/GameUI.png" type="Texture" id=1] + +[resource] +atlas = ExtResource( 1 ) +region = Rect2( 31, 49, 10, 11 ) diff --git a/game/ui/touch_pad/TurnPanel.gd b/game/ui/touch_pad/TurnPanel.gd new file mode 100644 index 00000000..1859357f --- /dev/null +++ b/game/ui/touch_pad/TurnPanel.gd @@ -0,0 +1,111 @@ +extends Node2D + +const INACTIVE_IDX = -1; + +export (NodePath) var listenerNodePath : NodePath = "../../../../../.." +export (String) var padname : String = "" + +var parent : Control + +var centerPoint = Vector2(0,0) +var currentForce = Vector2(0,0) +var last_pointer_position : Vector2 = Vector2() + +var currentPointerIDX = INACTIVE_IDX; + +var listener : Entity = null + +func _ready(): + parent = get_node("..") + listener = get_node(listenerNodePath) as Entity + + set_process_input(true) + +func get_force(): + return currentForce + +func _input(event): + var incomingPointer = extractPointerIdx(event) + + if incomingPointer == INACTIVE_IDX: + return + + if need2ChangeActivePointer(event): + if (currentPointerIDX != incomingPointer) and event.is_pressed(): + currentPointerIDX = incomingPointer; + last_pointer_position = Vector2(event.position.x - parent.get_global_rect().position.x, event.position.y - parent.get_global_rect().position.y); + + get_tree().set_input_as_handled() + + var theSamePointer = currentPointerIDX == incomingPointer + if isActive() and theSamePointer: + process_input(event) + +func need2ChangeActivePointer(event): #touch down inside analog + if event is InputEventMouseButton or event is InputEventScreenTouch: + return parent.get_global_rect().has_point(Vector2(event.position.x, event.position.y)) + else: + return false + +func isActive(): + return currentPointerIDX != INACTIVE_IDX + +func extractPointerIdx(event): + var touch = event is InputEventScreenTouch + var drag = event is InputEventScreenDrag + var mouseButton = event is InputEventMouseButton + var mouseMove = event is InputEventMouseMotion + + #print(event) + if touch: + return event.index + + elif drag: + + + return event.index + elif mouseButton or mouseMove: + #plog("SOMETHING IS VERYWRONG??, I HAVE MOUSE ON TOUCH DEVICE") + return INACTIVE_IDX + else: + return INACTIVE_IDX + +func process_input(event): + calculateForce(event.position.x - parent.get_global_rect().position.x, event.position.y - parent.get_global_rect().position.y) + + var isReleased = isReleased(event) + if isReleased: + reset() + + get_tree().set_input_as_handled() + + +func reset(): + currentPointerIDX = INACTIVE_IDX + ##calculateForce(0, 0) + last_pointer_position = Vector2() + +func calculateForce(var x, var y): + var v : Vector2 = Vector2(x, y) + currentForce = last_pointer_position - v + last_pointer_position = v + + sendSignal2Listener() + +func sendSignal2Listener(): + if (listener != null): +# listener.analog_force_change(currentForce, self) + listener.queue_camera_rotation(currentForce) + +func isPressed(event): + if event is InputEventMouseMotion: + return (InputEventMouse.button_mask == 1) + elif event is InputEventScreenTouch: + return event.is_pressed() + +func isReleased(event): + if event is InputEventScreenTouch: + return !event.is_pressed() + elif event is InputEventMouseButton: + return !event.is_pressed() + diff --git a/game/ui/touch_pad/analog.gd b/game/ui/touch_pad/analog.gd new file mode 100644 index 00000000..d48122cf --- /dev/null +++ b/game/ui/touch_pad/analog.gd @@ -0,0 +1,156 @@ +extends Node2D + +# This is by someone else TODO check! + +const INACTIVE_IDX = -1; +export var isDynamicallyShowing = false +export (NodePath) var listenerNodePath : NodePath = "/root/game/player" +export var padname = "" + +var ball +var bg +var animation_player +var parent +var listenerNode + +var centerPoint = Vector2(0,0) +var currentForce = Vector2(0,0) +var halfSize = Vector2() +var ballPos = Vector2() +var squaredHalfSizeLength = 0 +var currentPointerIDX = INACTIVE_IDX; + +func _ready(): + set_process_input(true) + bg = get_node("bg") + ball = get_node("ball") + animation_player = get_node("AnimationPlayer") + parent = get_parent() + halfSize = bg.texture.get_size()/2 + squaredHalfSizeLength = halfSize.x * halfSize.y + + if (listenerNodePath != "" && listenerNodePath!=null): + listenerNode = get_node(listenerNodePath) + elif listenerNodePath=="": + listenerNode = null + +# isDynamicallyShowing = isDynamicallyShowing and parent extends Control + if isDynamicallyShowing: + modulate.a = 0 +# hide() + +func get_force(): + return currentForce + +func _unhandled_input(event): + + var incomingPointer = extractPointerIdx(event) + #print(incomingPointer) + + if incomingPointer == INACTIVE_IDX: + return + + if need2ChangeActivePointer(event): + if (currentPointerIDX != incomingPointer) and event.is_pressed(): + currentPointerIDX = incomingPointer; + showAtPos(Vector2(event.position.x, event.position.y)); + get_tree().set_input_as_handled() + + var theSamePointer = currentPointerIDX == incomingPointer + if isActive() and theSamePointer: + process_input(event) + +func need2ChangeActivePointer(event): #touch down inside analog + if event is InputEventMouseButton or event is InputEventScreenTouch: + if isDynamicallyShowing: + #print(get_parent().get_global_rect()) + return get_parent().get_global_rect().has_point(Vector2(event.position.x, event.position.y)) + else: + var length = (global_position - Vector2(event.position.x, event.position.y)).length_squared(); + return length < squaredHalfSizeLength + else: + return false + +func isActive(): + return currentPointerIDX != INACTIVE_IDX + +func extractPointerIdx(event): + var touch = event is InputEventScreenTouch + var drag = event is InputEventScreenDrag + var mouseButton = event is InputEventMouseButton + var mouseMove = event is InputEventMouseMotion + + #print(event) + if touch: + return event.index + + elif drag: + + + return event.index + elif mouseButton or mouseMove: + #plog("SOMETHING IS VERYWRONG??, I HAVE MOUSE ON TOUCH DEVICE") + return INACTIVE_IDX + else: + return INACTIVE_IDX + +func process_input(event): + calculateForce(event.position.x - global_position.x, event.position.y - global_position.y) + updateBallPos() + + var isReleased = isReleased(event) + if isReleased: + reset() + + get_tree().set_input_as_handled() + + +func reset(): + currentPointerIDX = INACTIVE_IDX + calculateForce(0, 0) + + if isDynamicallyShowing: + hide() + else: + updateBallPos() + +func showAtPos(pos): + if isDynamicallyShowing: + animation_player.play("alpha_in", 0.2) + global_position = pos + +func hide(): + animation_player.play("alpha_out", 0.2) + +func updateBallPos(): + ballPos.x = halfSize.x * currentForce.x #+ halfSize.x + ballPos.y = halfSize.y * -currentForce.y #+ halfSize.y + ball.position = Vector2(ballPos.x, ballPos.y) + +func calculateForce(var x, var y): + #get direction + currentForce.x = (x - centerPoint.x)/halfSize.x + currentForce.y = -(y - centerPoint.y)/halfSize.y + #print(currentForce.x, currentForce.y) + #limit + #print(currentForce.length_squared()) + if currentForce.length_squared()>1: + currentForce=currentForce/currentForce.length() + + sendSignal2Listener() + +func sendSignal2Listener(): + if (listenerNode != null): + listenerNode.analog_force_change(currentForce, self) + +func isPressed(event): + if event is InputEventMouseMotion: + return (InputEventMouse.button_mask == 1) + elif event is InputEventScreenTouch: + return event.is_pressed() + +func isReleased(event): + if event is InputEventScreenTouch: + return !event.is_pressed() + elif event is InputEventMouseButton: + return !event.is_pressed() diff --git a/game/ui/touch_pad/analog.tscn b/game/ui/touch_pad/analog.tscn new file mode 100644 index 00000000..a5187c5c --- /dev/null +++ b/game/ui/touch_pad/analog.tscn @@ -0,0 +1,94 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://ui/touch_pad/analog.gd" type="Script" id=1] +[ext_resource path="res://ui/touch_pad/big_circle.png" type="Texture" id=2] +[ext_resource path="res://ui/touch_pad/small_circle.png" type="Texture" id=3] + +[sub_resource type="Animation" id=1] +length = 5.0 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} + +[sub_resource type="Animation" id=2] +step = 1.0 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 0 ), +"update": 0, +"values": [ Color( 0, 0, 0, 0 ) ] +} + +[sub_resource type="Animation" id=3] +tracks/0/type = "value" +tracks/0/path = NodePath("ball:rotation_degrees") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("ball:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ) ] +} + +[sub_resource type="Animation" id=4] +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} + +[node name="Analog" type="Node2D"] +script = ExtResource( 1 ) +__meta__ = { +"__editor_plugin_screen__": "2D" +} +isDynamicallyShowing = true + +[node name="bg" type="Sprite" parent="."] +texture = ExtResource( 2 ) + +[node name="ball" type="Sprite" parent="."] +texture = ExtResource( 3 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/alpha_in = SubResource( 1 ) +anims/alpha_out = SubResource( 2 ) +anims/ball_center = SubResource( 3 ) +anims/default = SubResource( 4 ) diff --git a/game/ui/touch_pad/analog.xml b/game/ui/touch_pad/analog.xml new file mode 100644 index 00000000..2152ca61 --- /dev/null +++ b/game/ui/touch_pad/analog.xml @@ -0,0 +1,313 @@ + + + + + + + + + + + 1 + False + 0.1 + "value" + ".:visibility/opacity" + 1 + + "cont" + True + "times" + 0 + "transitions" + 1 + "values" + + 1 + + + + + + 5 + False + 0.1 + "value" + ".:visibility/opacity" + 1 + + "cont" + True + "times" + 0 + "transitions" + 1 + "values" + + 1 + + + + + + 1 + False + 0.1 + "value" + "ball:transform/pos" + 1 + + "cont" + True + "times" + 0 + "transitions" + 1 + "values" + + 0, 0 + + + "value" + "ball:transform/rot" + 1 + + "cont" + True + "times" + 0 + "transitions" + 1 + "values" + + 0 + + + + + + 1 + False + 1 + "value" + ".:visibility/opacity" + 1 + + "cont" + True + "times" + 0 + "transitions" + 1 + "values" + + 0 + + + + + + + "conn_count" + 0 + "conns" + + "editable_instances" + + + "names" + + "Analog" + "transform/pos" + "script/script" + "__meta__" + "isDynamicallyShowing" + "listenerNodePath" + "name" + "Node2D" + "bg" + "texture" + "Sprite" + "ball" + "AnimationPlayer" + "playback/process_mode" + "playback/default_blend_time" + "root/root" + "anims/default" + "anims/alpha_in" + "anims/ball_center" + "anims/alpha_out" + "playback/active" + "playback/speed" + "blend_times" + "autoplay" + + "node_count" + 4 + "node_paths" + + + "nodes" + -1, -1, 7, 0, -1, 6, 1, 0, 2, 1, 3, 2, 4, 3, 5, 4, 6, 4, 0, 0, 0, 10, 8, -1, 1, 9, 5, 0, 0, 0, 10, 11, -1, 1, 9, 6, 0, 0, 0, 12, 12, -1, 11, 13, 7, 14, 8, 15, 9, 16, 10, 17, 11, 18, 12, 19, 13, 20, 14, 21, 15, 22, 16, 23, 4, 0 + "variants" + + 192.941, 221.425 + + + "__editor_plugin_screen__" + "2D" + "__editor_plugin_states__" + + "2D" + + "ofs" + -534.358, 78.6721 + "snap_grid" + True + "snap_offset" + 0, 0 + "snap_pixel" + False + "snap_relative" + False + "snap_rotation" + False + "snap_rotation_offset" + 0 + "snap_rotation_step" + 0.261799 + "snap_show_grid" + False + "snap_step" + 10, 10 + "zoom" + 0.814506 + + "3D" + + "ambient_light_color" + 0.15, 0.15, 0.15, 1 + "default_light" + True + "default_srgb" + False + "deflight_rot_x" + 0.942478 + "deflight_rot_y" + 0.628319 + "fov" + 45 + "show_grid" + True + "show_origin" + True + "viewport_mode" + 1 + "viewports" + + + "distance" + 4 + "listener" + True + "pos" + -0.972839, 5.12177, 4.10017 + "use_environment" + False + "use_orthogonal" + False + "x_rot" + 0 + "y_rot" + 0 + + + "distance" + 4 + "listener" + False + "pos" + 0, 0, 0 + "use_environment" + False + "use_orthogonal" + False + "x_rot" + 0 + "y_rot" + 0 + + + "distance" + 4 + "listener" + False + "pos" + 0, 0, 0 + "use_environment" + False + "use_orthogonal" + False + "x_rot" + 0 + "y_rot" + 0 + + + "distance" + 4 + "listener" + False + "pos" + 0, 0, 0 + "use_environment" + False + "use_orthogonal" + False + "x_rot" + 0 + "y_rot" + 0 + + + "zfar" + 500 + "znear" + 0.1 + + "Anim" + + "visible" + False + + + "__editor_run_settings__" + + "custom_args" + "-l $scene" + "run_mode" + 0 + + + False + "" + + + 1 + 0 + ".." + + + + + True + 1 + + + + "version" + 2 + + + + \ No newline at end of file diff --git a/game/ui/touch_pad/big_circle.png b/game/ui/touch_pad/big_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e305bf2d2ec663b45da829f39435878b4aa7f1 GIT binary patch literal 3779 zcmV;!4m|ORP)8bMU-1qCaj*kZw0V~jP% z6}!=8l4Xg;SQA|ujV8tzV?kqYU^F7eE-LnpC{}EUQjDTJ}_r5u2-presH*@cl zcfPe|y?f8ScV@rYd(PRX?JYDJs@ek>3aksP9K8ku{eZsF-#!H%{~DMB%#HrO4}1{) zeHD0HMB0*)y%tEV1*jBN9RO?zi~=?V)&~|(=;OWtUIr!uj{%cJWM)F2l?n}K0IIqu zrtqDBoq_dgD-o{%_W=`tCq(4?8p~4_4PyYRx-oDdupiLB#K#r_p8+2Ovw{CbudfT- z-v?MCdMypC2rLKmDDm^Y1nvZG10E8Qg(W^$GwRv^RCO?>^aFu4i`+g3`!!AlrU7pO zp8%EqA{W67VQBPP18Zjb7J2St;2Pj+5qYmd84{x|4M0^l1x^8Wqp*yvz%y7|{2b=2 zrG;RQ$iwM~S2}fN0IIqz@LOQJ0=Ik*Jc+frj{)DMBw8_g z10#X$G5@4@f%{$n&IZPdh^8c4r__Z3sOlKtcbFHSkJ!tfqg{eoumaw+yGQ{S70nQ zvKG^ZS^AY&)!&_I0S?EShKy7G1#ocEJ%z*!KvgrCb8}M8=X?&FigkqoSw;Zo;16>v z_8p#{)VM(+2B50Fft#_BJeP^sKlx1(pW6iV!Nx?a~sANZ=e0jO$UU_7w3 zQ#>E|1J=P}d$Uc->e!gcGEUhPU`G*|UX2f^iUFwVKwuIu z#3_CoI2Q9}16`*-9S6?d1xAX;&8vt%U9pmDB*|V$+;4Gk{-Fc)eYqa^?cZ<2S9l17~*i4ZGw7 zs_I_A9Zu0K;836{o@t;cgMh2Z4zDY)mxzoj_l?Rn099QHo2-btCJTTg@ST)E@(c$q zC%a;KCNNAyJ}Ku-%4z~4r|%B@e(9eG%C7~_V^ioc{ein89hFSEKEQeSqkI#vY2H9> zxDjwy8gGIvIxU%!n*deaD*CY4Xg&q@Cv^8}O+U;KmW$5YfKejyWGN4qWB{t#3)>ty zG%9MvoW3b#i5f_Xbugze9us&2^9L3bd$80d;5f3%2e^)){CeVb;0EV>ZEOyvC`D_4 zXzBKAWLNKgfUR&XYF&X;>4o`YD@Nz@fOU#3IWMIKxD0>k_W1WCq1SGxUkqm zof?3u?tl$9#ypD6NeAkaC$U-Cn7vhXbY~BA+61WTWUOleR;BzH8}bd*FUwJQ0XLzr6wY>7YSe|JKH1=8bo=XfBnqkA#e0QPr|TY(1>5-N}$599B^-rK#{ZUE7g z@4n8p#|d-&&A_*qE@O6gR}Hx}z&5~A&iTCw3l>NZw>Pj97TXZ;4Z!XC&BG=Z0?olB z{FsXEp=n$L_@Q(BJYmYWnP|mUa>ukgf*Al+T@im*Z}{~$AFfW?hQ!tJ{9FU5DDZHgA#iovn!)${3ne`cG!HG#@w^QF$WX=c z=L2<*tK%;-_`|<_Qx+zWKCX_x$Tfgv2sAtH(Ek@1`~{#Zq$^9H2DmzYKi2@3C3FRw znHK!HpZ9VNK*&a#3^X6Px_v)`#hG65G5*D_cVB6k{iH3H3wtJ~QkGCdPz zrGCS?um*u<#ntWWklh*dv~yt?RY)iqs5^Q9>pSO9LsrplfZ@gQmx>3PgVphe`X@ow z0G`UZd80HW3Z%-0&ao107ta8Q$jA8m#9jBwR22^l*X3W)u7o-gaHP2Ji^}l3_PyP@u7KbvX+sY+Snmh{$)qc<08^ zgn5Bxpf^rfIN(kZX98Gs_s`XF2LqT0eC(X>laNq>^l)|f z0q~G}(K7%M`5r$x#0J2S#6$}u&8on<&iQpB(&pZfZ^-v5vik!BKY(BJy7DO@$_X{^A_>#E&8#XbkoR7IDrm$#+x1 z#F47{66OPd?I_(1m|ZRD0*SITmh2<;{+|<(yaRikP5YkZ9Jc_6R7JEv8XSz@^*giB zjm1*OJ_T$Roi41OayLriZ;bhED@+Lb|G7116(g64|n!Jr%eDr6j%ODvRjH~0ej&`o(|NWC9$N@ z@w)%nz*-{GX~OTKYyU*#GvHjOXldZEE(#e)jwA3leVkQH`A|X)0HCTpfakCUqhKS2 zzXl#HQ^-Ivj0P?wtIubE&2xu+^HGuk0I2F#SPr_l*7y?G4}W`kAbkb^Hl)U^~L>|L$3YG!R$9e~W+OR10%XicLol&atq5Sp#X8;d6=Nn>ePoOp&4Xopw zPsIO`7Nz7SAVyVJ!cvgMu>{(HV}Z%#zE_|kMgo5(`y-wS3=@%03O~}3vUdQ9$aLT* z*vMe~9v73HHwYxpFyI2R`dbL>Q?Bx%i(9}%Ga!7X6?r?-wYG!Ps~0F55p( zM7q=?E4vAZQB}bfkNn&zo)MiF?SBTk#6aL`%=3@A3OFp<MmJ_Kru>0U*-OA^5ve%AM^)kgM1t%FOm&J^ z0ItARrUtsk>cExw%AbN&`&G&AQnf%3BJv@Ykl0O9+#mQS**Szj=?uq|@5XMNj1BWn zuhxfDr3r9R)n332z}`-A8)gVsM#q7|WPoFUpW*B0cHlq}nP1HhtGWR|`|RQ6beuMR z9yk>nwF-1(0B{abVrPddfMY~tVaG=*Bav7@k)THc=iw)z7!F)Vh(MB$5!iR*D!&ag zh@+BFJ|t8FxTxw**gxjxCu{@$g*6HD@;%p$Xu&4b_Q(H0&HxS)kq7cVRV5NP0033( z4~zwN&bc%fGlE;_e!f8l+q`i&ww%l5Uf>WBNj#BfDh2@UL&wKqlNh;~NnXd+7UV`P zZC2I=P6pP>DQ^W%1TO9B&~CY;W&km&x*6~{{FpUh8O!d(YKmqZK^y=a3har$Z3}G4 z-O(cQY=@^3By|IT_Flr#z}a+6Qn3Kr)^sg?qT@zp0Jd9aZ#qU@nGKu`32aHqg+|O$J)Ycfe+J_tZEFx6hDTJidW1zJ~0m2Rtsus05PgM65EBeL%z${ z_`x_Vx84z)36;b`DB}i&4N9MMY^n) zT*ocI7MS92)PDm2K$9g0j2?O0iRNNKIER*Y~0Z3 zwI)%hZG)C+ZO05MUoVLNOw>Yn&ppo;M&@OkuicJ#NQliC-+UBIot!?p10%cUU-#D*|hiZMRp$jG`Yl@YDxu!{fer tE9OId4a~vjDCS_%P~z8=D6D={@qfx=PiE|Cvx@)#002ovPDHLkV1gLt?*sq< literal 0 HcmV?d00001 diff --git a/game/ui/touch_pad/big_circle.png.import b/game/ui/touch_pad/big_circle.png.import new file mode 100644 index 00000000..4fba7199 --- /dev/null +++ b/game/ui/touch_pad/big_circle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/big_circle.png-3e7d1c39c6dde9ffecb18aecfb2a2a19.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/touch_pad/big_circle.png" +dest_files=[ "res://.import/big_circle.png-3e7d1c39c6dde9ffecb18aecfb2a2a19.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/ui/touch_pad/small_circle.png b/game/ui/touch_pad/small_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc2c840cacadb8f648d101b0e2743b90850db97 GIT binary patch literal 834 zcmV-I1HJr-P)4Q_K~z|U#n;b^m1PtM@Xzy76D2bfq|r#Y5EO!JV~L@Q3fia` zL?EfH`Uiq+Wf|Biv|r1ZT1K^~FshZ1w5Tb|jU_~2MBoS-sna-?;A!!^Z}+*kxy-%H zeaG+Wobx>Q{eC&mbI)^5G9V)2c07*V*of6wQ!ih@Mf{9UaXh88FzC0JB3>5}??%LY z4357dVmc!3T@LZ8h&U1v3quh1;%Y>^T4!%jq(0XdfTT)8r|0ke6rxVyxhi>3?ygwvyFZSU%RJA{YM^j4I6hU~gAU7g%cn@zC z{#G1poWy^Z?icy|$Z3Ch1mq=N(K(KJY)C21HW@fnkYB>l5tG9aoqM!O&bTTfZo}SU z<22@45O4+W6#l-57^~#+I$j5_$$z!B@UdJ=U=oj2*ja4&0e`nBU;*D3{;mr56@i%+ z$s2rA*qbZ4gf=*@ef(P3>np4+0vA?5z@@^TtaO*-SOEcDsBo_E*Yw*sLfl!{mn->M zZ7`*MtS{`d70wiahgU$rw!%JD$&E*Y2jw!^7RGfqImap-*SVQv*wdnbJ-DT||HPM7 zO6fX2EH*u(yOS9eCb7TpKS(KEZ(hU0xLVs2c)kSz2Xx+?dHH$H4M|Gr9NsK8@50j~ zB;T*QHG89JP;W*{_AMT1TCzc#(xZm&5r%6@3laC@bF3@Em*r++Ic@oG*qKuLsodOe zFu5BaVSCR~GnjmhvpQKBmn+;hxt8<}CST#Hl+xgjT||sU#7hw|w~WzjE+P&_#H|Ap zFCt_r@}N2FaQb#c+_Tj87d?VLLdx;{0r`%su9q*$XM7sR3^AVn3qc^X=|5shGXMYp M07*qoM6N<$f`9&bzW@LL literal 0 HcmV?d00001 diff --git a/game/ui/touch_pad/small_circle.png.import b/game/ui/touch_pad/small_circle.png.import new file mode 100644 index 00000000..4b1aff89 --- /dev/null +++ b/game/ui/touch_pad/small_circle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/small_circle.png-035ef8e6fee54222401287369836bd6a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/touch_pad/small_circle.png" +dest_files=[ "res://.import/small_circle.png-035ef8e6fee54222401287369836bd6a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/ui/unitframes/TargetUnitframe.gd b/game/ui/unitframes/TargetUnitframe.gd new file mode 100644 index 00000000..260875ed --- /dev/null +++ b/game/ui/unitframes/TargetUnitframe.gd @@ -0,0 +1,91 @@ +extends UnitFrame + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (PackedScene) var aura_entry_scene : PackedScene + +export (NodePath) var name_text_path : NodePath +export (NodePath) var health_range_path : NodePath +export (NodePath) var aura_grid_path : NodePath + +var name_text : Label +var health_range : Range +var aura_grid : GridContainer + +var player : Entity + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + name_text = get_node(name_text_path) as Label + health_range = get_node(health_range_path) as Range + aura_grid = get_node(aura_grid_path) as GridContainer + +func set_player(p_player : Entity) -> void: + if not player == null and is_instance_valid(player): + player.get_health().disconnect("c_changed", self, "_on_player_health_changed") + player.disconnect("caura_added", self, "on_caura_added") + player.disconnect("caura_removed", self, "on_caura_removed") + player.disconnect("cdied", self, "cdied") + + for a in aura_grid.get_children(): + aura_grid.remove_child(a) + a.queue_free(); + + player = null + set_process(false) + + if p_player == null: + hide() + return + + player = p_player + + for index in range(player.cget_aura_count()): + var aura : AuraData = player.cget_aura(index) + + on_caura_added(aura) + + + player.connect("caura_added", self, "on_caura_added") + player.connect("caura_removed", self, "on_caura_removed") + player.connect("cdied", self, "cdied") + + var health = player.get_health() + _on_player_health_changed(health) + health.connect("c_changed", self, "_on_player_health_changed") + + name_text.text = player.centity_name + + set_process(true) + show() + +func on_caura_added(aura_data : AuraData) -> void: + var created_node : Node = aura_entry_scene.instance() + + aura_grid.add_child(created_node) + created_node.owner = aura_grid + + created_node.set_aura_data(aura_data) + +func on_caura_removed(aura_data : AuraData) -> void: + for bn in aura_grid.get_children(): + if bn.get_aura_data() == aura_data: + aura_grid.remove_child(bn) + bn.queue_free() + return + +func _on_player_health_changed(health : Stat) -> void: + if health.cmax == 0: + health_range.min_value = 0 + health_range.max_value = 1 + health_range.value = 0 + return + + health_range.min_value = 0 + health_range.max_value = health.cmax + health_range.value = health.ccurrent + +func cdied(entity : Entity) -> void: + set_player(null) diff --git a/game/ui/unitframes/TargetUnitframe.tscn b/game/ui/unitframes/TargetUnitframe.tscn new file mode 100644 index 00000000..18d7d441 --- /dev/null +++ b/game/ui/unitframes/TargetUnitframe.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/unitframes/TargetUnitframe.gd" type="Script" id=1] +[ext_resource path="res://ui/auraframe/AuraEntry.tscn" type="PackedScene" id=2] + +[node name="TargetUnitframe" type="UnitFrame"] +margin_left = 151.0 +margin_right = 300.0 +margin_bottom = 60.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +aura_entry_scene = ExtResource( 2 ) +name_text_path = NodePath("MarginContainer/HBoxContainer/VBoxContainer/Label") +health_range_path = NodePath("MarginContainer/HBoxContainer/VBoxContainer/ProgressBar") +aura_grid_path = NodePath("auras") + +[node name="MarginContainer" type="MarginContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +margin_left = 2.0 +margin_top = 2.0 +margin_right = 147.0 +margin_bottom = 60.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HBoxContainer"] +margin_right = 145.0 +margin_bottom = 58.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Label" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer"] +margin_right = 145.0 +margin_bottom = 25.0 + +[node name="ProgressBar" type="ProgressBar" parent="MarginContainer/HBoxContainer/VBoxContainer"] +margin_top = 33.0 +margin_right = 145.0 +margin_bottom = 58.0 + +[node name="auras" type="GridContainer" parent="."] +margin_left = 1.0 +margin_top = 61.0 +margin_right = 149.0 +margin_bottom = 193.0 +columns = 9 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/unitframes/UnitframeBase.gd b/game/ui/unitframes/UnitframeBase.gd new file mode 100644 index 00000000..db16f578 --- /dev/null +++ b/game/ui/unitframes/UnitframeBase.gd @@ -0,0 +1,82 @@ +extends Container + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var name_text_path : NodePath +export (NodePath) var level_text_path : NodePath +export (NodePath) var health_range_path : NodePath +export (NodePath) var xp_range_path : NodePath + +var _name_text : Label +var _level_text : Label +var _health_range : Range +var _xp_range : Range + +var _player : Entity + +func _ready() -> void: + _name_text = get_node(name_text_path) + _level_text = get_node(level_text_path) + _health_range = get_node(health_range_path) + _xp_range = get_node(xp_range_path) + +func set_player(p_player: Entity) -> void: + if not _player == null: + _player.get_health().disconnect("c_changed", self, "_on_player_health_changed") + _player.disconnect("cname_changed", self, "cname_changed") + _player.disconnect("con_level_up", self, "clevel_changed") + _player.disconnect("con_level_changed", self, "clevel_changed") + _player.disconnect("con_xp_gained", self, "con_xp_gained") + _player.disconnect("centity_data_changed", self, "centity_data_changed") + + _player = null + + if p_player == null: + return + + _player = p_player + + _player.connect("cname_changed", self, "cname_changed") + _player.connect("con_level_up", self, "clevel_changed") + _player.connect("con_level_changed", self, "clevel_changed") + _player.connect("con_xp_gained", self, "con_xp_gained") + _player.connect("centity_data_changed", self, "centity_data_changed") + + var health = _player.get_health() + _on_player_health_changed(health) + health.connect("c_changed", self, "_on_player_health_changed") + + _name_text.text = _player.centity_name + _level_text.text = str(_player.clevel) + + clevel_changed(_player, 0) + con_xp_gained(_player, 0) + +func _on_player_health_changed(health: Stat) -> void: + if health.cmax == 0: + _health_range.min_value = 0 + _health_range.max_value = 1 + _health_range.value = 0 + return + + _health_range.min_value = 0 + _health_range.max_value = health.cmax + _health_range.value = health.ccurrent + +func cname_changed(entity: Entity) -> void: + _name_text.text = _player.centity_name + +func clevel_changed(entity: Entity, value : int) -> void: + _level_text.text = str(_player.clevel) + + _xp_range.min_value = 0 + _xp_range.max_value = Entities.get_xp_data().get_xp(_player.clevel) + +func con_xp_gained(entity: Entity, val: int) -> void: + _xp_range.value = _player.cxp + +func centity_data_changed(data: EntityData) -> void: + var health = _player.get_health() + _on_player_health_changed(health) diff --git a/game/ui/unitframes/UnitframeBase.tscn b/game/ui/unitframes/UnitframeBase.tscn new file mode 100644 index 00000000..d29a5d6d --- /dev/null +++ b/game/ui/unitframes/UnitframeBase.tscn @@ -0,0 +1,60 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/unitframes/UnitframeBase.gd" type="Script" id=1] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=2] + +[node name="UnitFrame" type="PanelContainer"] +margin_right = 150.0 +margin_bottom = 69.0 +theme = ExtResource( 2 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +name_text_path = NodePath("VBoxContainer/HBoxContainer/Label") +level_text_path = NodePath("VBoxContainer/HBoxContainer/Label2") +health_range_path = NodePath("VBoxContainer/ProgressBar") +xp_range_path = NodePath("VBoxContainer/XPBar") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 146.0 +margin_bottom = 65.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/separation = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 142.0 +margin_bottom = 15.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_right = 134.0 +margin_bottom = 15.0 +size_flags_horizontal = 3 + +[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_left = 142.0 +margin_right = 142.0 +margin_bottom = 15.0 + +[node name="ProgressBar" type="ProgressBar" parent="VBoxContainer"] +margin_top = 16.0 +margin_right = 142.0 +margin_bottom = 35.0 +size_flags_horizontal = 3 + +[node name="ResourceBar" type="ProgressBar" parent="VBoxContainer"] +margin_top = 36.0 +margin_right = 142.0 +margin_bottom = 55.0 +size_flags_horizontal = 3 + +[node name="XPBar" type="ProgressBar" parent="VBoxContainer"] +margin_top = 56.0 +margin_right = 142.0 +margin_bottom = 61.6018 +rect_min_size = Vector2( 20, 5 ) +size_flags_horizontal = 3 +percent_visible = false diff --git a/game/ui/windows/CharacterWindow.tscn b/game/ui/windows/CharacterWindow.tscn new file mode 100644 index 00000000..fcfed619 --- /dev/null +++ b/game/ui/windows/CharacterWindow.tscn @@ -0,0 +1,38 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] + +[node name="CharacterWindow" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 40.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] +margin_top = 12.0 +margin_right = 968.0 +margin_bottom = 27.0 +size_flags_horizontal = 3 +text = "Equipment" + +[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 976.0 +margin_right = 1016.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 40, 40 ) +text = "X" +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/ui/windows/CraftItemDescription.gd b/game/ui/windows/CraftItemDescription.gd new file mode 100644 index 00000000..13c7ee09 --- /dev/null +++ b/game/ui/windows/CraftItemDescription.gd @@ -0,0 +1,26 @@ +extends HBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(NodePath) var icon_path : NodePath +export(NodePath) var name_label_path : NodePath +export(NodePath) var description_label_path : NodePath + +var _icon : TextureRect +var _name_label : Label +var _description_label : RichTextLabel + +func _ready(): + _icon = get_node(icon_path) as TextureRect + _name_label = get_node(name_label_path) as Label + _description_label = get_node(description_label_path) as RichTextLabel + +func set_item(item: CraftRecipeHelper) -> void: + if item == null: + return + + _icon.texture = item.item.icon + _name_label.text = item.item.text_name + _description_label.text = item.item.text_name diff --git a/game/ui/windows/CraftingWindow.gd b/game/ui/windows/CraftingWindow.gd new file mode 100644 index 00000000..ed7d726d --- /dev/null +++ b/game/ui/windows/CraftingWindow.gd @@ -0,0 +1,90 @@ +extends PanelContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var item_entry_scene : PackedScene +export(PackedScene) var recipe_selector_scene : PackedScene + +export(NodePath) var item_container_path : NodePath +export(NodePath) var tools_container_path : NodePath +export(NodePath) var materials_container_path : NodePath +export(NodePath) var recipe_selector_container_path : NodePath + +var _item_container : Node +var _tools_container : Node +var _materials_container : Node +var _recipe_selector_container : Node + +var _selected_craft_recipe : CraftRecipe + +var _player : Entity + +func _ready(): + _item_container = get_node(item_container_path) + _tools_container = get_node(tools_container_path) + _materials_container = get_node(materials_container_path) + _recipe_selector_container = get_node(recipe_selector_container_path) + +func set_player(entity: Entity) -> void: + _player = entity + + set_category(CraftRecipe.CRAFT_CATEGORY_ALCHEMY) + +func set_category(category: int) -> void: + for ch in _recipe_selector_container.get_children(): + ch.queue_free() + + for i in range(_player.gets_craft_recipe_count()): + var cr : CraftRecipe = _player.gets_craft_recipe(i) + + if cr.category == category: + var rss : Node = recipe_selector_scene.instance() + _recipe_selector_container.add_child(rss) + rss.owner = _recipe_selector_container + + rss.set_recipe(cr, self) + + +func request_craft() -> void: + _player.crequest_craft(_selected_craft_recipe.id) + + for ch in _tools_container.get_children(): + ch.refresh() + + for ch in _materials_container.get_children(): + ch.refresh() + +func select_recipe(recipe : CraftRecipe) -> void: + _selected_craft_recipe = recipe + + _item_container.set_item(recipe.item) + + for ch in _tools_container.get_children(): + ch.queue_free() + + for ch in _materials_container.get_children(): + ch.queue_free() + + for i in range(recipe.get_required_tools_count()): + var ih : CraftRecipeHelper = recipe.get_required_tool(i) + + if ih == null: + continue + + var ie : Node = item_entry_scene.instance() + _tools_container.add_child(ie) + ie.owner = _tools_container + ie.set_item(_player, ih) + + for i in range(recipe.get_required_materials_count()): + var ih : CraftRecipeHelper = recipe.get_required_material(i) + + if ih == null: + continue + + var ie : Node = item_entry_scene.instance() + _materials_container.add_child(ie) + ie.owner = _materials_container + ie.set_item(_player, ih) diff --git a/game/ui/windows/CraftingWindow.tscn b/game/ui/windows/CraftingWindow.tscn new file mode 100644 index 00000000..4338d3c7 --- /dev/null +++ b/game/ui/windows/CraftingWindow.tscn @@ -0,0 +1,259 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://ui/windows/CraftingWindow.gd" type="Script" id=2] +[ext_resource path="res://ui/crafting/RecipeSelector.tscn" type="PackedScene" id=3] +[ext_resource path="res://ui/crafting/ItemEntry.tscn" type="PackedScene" id=4] +[ext_resource path="res://ui/windows/CraftItemDescription.gd" type="Script" id=5] + +[sub_resource type="ButtonGroup" id=1] + +[node name="CraftingWindow" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 1 ) +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} +item_entry_scene = ExtResource( 4 ) +recipe_selector_scene = ExtResource( 3 ) +item_container_path = NodePath("VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription") +tools_container_path = NodePath("VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/ToolsContainer") +materials_container_path = NodePath("VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/MaterialContainer") +recipe_selector_container_path = NodePath("VBoxContainer/VBoxContainer/HBoxContainer/Recipes/VBoxContainer") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 + +[node name="Header" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 30.0 + +[node name="Label" type="Label" parent="VBoxContainer/Header"] +margin_top = 7.0 +margin_right = 972.0 +margin_bottom = 22.0 +size_flags_horizontal = 3 +text = "Crafting" + +[node name="Button" type="Button" parent="VBoxContainer/Header"] +margin_left = 976.0 +margin_right = 1016.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 40, 30 ) +text = "X" + +[node name="Categories" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 38.0 +margin_right = 1016.0 +margin_bottom = 64.0 + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/Categories"] +margin_right = 1016.0 +margin_bottom = 26.0 +rect_min_size = Vector2( 0, 20 ) +size_flags_horizontal = 3 +size_flags_vertical = 3 +alignment = 1 + +[node name="Alchemy" type="Button" parent="VBoxContainer/Categories/HBoxContainer2"] +margin_left = 198.0 +margin_right = 298.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 100, 0 ) +toggle_mode = true +pressed = true +group = SubResource( 1 ) +text = "Alchemy" + +[node name="Smithing" type="Button" parent="VBoxContainer/Categories/HBoxContainer2"] +margin_left = 302.0 +margin_right = 402.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 100, 0 ) +toggle_mode = true +group = SubResource( 1 ) +text = "Smithing" + +[node name="Enchanting" type="Button" parent="VBoxContainer/Categories/HBoxContainer2"] +margin_left = 406.0 +margin_right = 506.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 100, 0 ) +toggle_mode = true +group = SubResource( 1 ) +text = "Enchantig" + +[node name="Engineering" type="Button" parent="VBoxContainer/Categories/HBoxContainer2"] +margin_left = 510.0 +margin_right = 610.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 100, 0 ) +toggle_mode = true +group = SubResource( 1 ) +text = "Engineering" + +[node name="Tailoring" type="Button" parent="VBoxContainer/Categories/HBoxContainer2"] +margin_left = 614.0 +margin_right = 714.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 100, 0 ) +toggle_mode = true +group = SubResource( 1 ) +text = "Tailoring" + +[node name="Other" type="Button" parent="VBoxContainer/Categories/HBoxContainer2"] +margin_left = 718.0 +margin_right = 818.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 100, 0 ) +toggle_mode = true +group = SubResource( 1 ) +text = "Other" + +[node name="VBoxContainer" type="MarginContainer" parent="VBoxContainer"] +margin_top = 72.0 +margin_right = 1016.0 +margin_bottom = 592.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 520.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="CraftEntry" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer"] +margin_right = 607.0 +margin_bottom = 520.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.6 +custom_constants/separation = 10 + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry"] +margin_right = 607.0 +margin_bottom = 480.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +scroll_horizontal_enabled = false + +[node name="VBoxContainer2" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer"] +margin_right = 607.0 +margin_bottom = 122.0 +size_flags_horizontal = 3 + +[node name="CraftItemDescription" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2"] +margin_right = 607.0 +margin_bottom = 60.0 +alignment = 1 +script = ExtResource( 5 ) +icon_path = NodePath("VBoxContainer/PanelContainer/TextureRect") +name_label_path = NodePath("PanelContainer2/VBoxContainer/Label") +description_label_path = NodePath("PanelContainer2/VBoxContainer/RichTextLabel") + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription"] +margin_left = 121.0 +margin_right = 181.0 +margin_bottom = 60.0 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription/VBoxContainer"] +margin_right = 60.0 +margin_bottom = 60.0 +rect_min_size = Vector2( 60, 60 ) + +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription/VBoxContainer/PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 56.0 +margin_bottom = 56.0 +expand = true + +[node name="PanelContainer2" type="PanelContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription"] +margin_left = 185.0 +margin_right = 485.0 +margin_bottom = 60.0 +rect_min_size = Vector2( 300, 0 ) + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription/PanelContainer2"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 296.0 +margin_bottom = 56.0 + +[node name="Label" type="Label" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription/PanelContainer2/VBoxContainer"] +margin_right = 292.0 +margin_bottom = 15.0 + +[node name="RichTextLabel" type="RichTextLabel" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2/CraftItemDescription/PanelContainer2/VBoxContainer"] +margin_top = 23.0 +margin_right = 292.0 +margin_bottom = 52.0 +size_flags_vertical = 3 +text = " +" +scroll_active = false + +[node name="Label2" type="Label" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2"] +margin_top = 68.0 +margin_right = 607.0 +margin_bottom = 83.0 +text = "Tools" + +[node name="ToolsContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2"] +margin_top = 91.0 +margin_right = 607.0 +margin_bottom = 91.0 + +[node name="Label" type="Label" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2"] +margin_top = 99.0 +margin_right = 607.0 +margin_bottom = 114.0 +text = "Materials" + +[node name="MaterialContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/ScrollContainer/VBoxContainer2"] +margin_top = 122.0 +margin_right = 607.0 +margin_bottom = 122.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry"] +margin_top = 490.0 +margin_right = 607.0 +margin_bottom = 520.0 +alignment = 1 + +[node name="CraftButton" type="Button" parent="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/HBoxContainer"] +margin_left = 253.0 +margin_right = 353.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 100, 30 ) +text = "Craft" + +[node name="Recipes" type="ScrollContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer"] +margin_left = 611.0 +margin_right = 1016.0 +margin_bottom = 520.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.4 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/HBoxContainer/Recipes"] +margin_right = 405.0 +margin_bottom = 40.0 +size_flags_horizontal = 3 + +[node name="Button" parent="VBoxContainer/VBoxContainer/HBoxContainer/Recipes/VBoxContainer" instance=ExtResource( 3 )] +margin_right = 405.0 +[connection signal="pressed" from="VBoxContainer/Header/Button" to="." method="hide"] +[connection signal="pressed" from="VBoxContainer/Categories/HBoxContainer2/Alchemy" to="." method="set_category" binds= [ 1 ]] +[connection signal="pressed" from="VBoxContainer/Categories/HBoxContainer2/Smithing" to="." method="set_category" binds= [ 2 ]] +[connection signal="pressed" from="VBoxContainer/Categories/HBoxContainer2/Enchanting" to="." method="set_category" binds= [ 4 ]] +[connection signal="pressed" from="VBoxContainer/Categories/HBoxContainer2/Engineering" to="." method="set_category" binds= [ 5 ]] +[connection signal="pressed" from="VBoxContainer/Categories/HBoxContainer2/Tailoring" to="." method="set_category" binds= [ 3 ]] +[connection signal="pressed" from="VBoxContainer/Categories/HBoxContainer2/Other" to="." method="set_category" binds= [ 0 ]] +[connection signal="pressed" from="VBoxContainer/VBoxContainer/HBoxContainer/CraftEntry/HBoxContainer/CraftButton" to="." method="request_craft"] diff --git a/game/ui/windows/InventoryWindow.tscn b/game/ui/windows/InventoryWindow.tscn new file mode 100644 index 00000000..69e3f87f --- /dev/null +++ b/game/ui/windows/InventoryWindow.tscn @@ -0,0 +1,125 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/windows/inventory/ItemEntry.tscn" type="PackedScene" id=1] +[ext_resource path="res://ui/windows/base/BaseWindow.tscn" type="PackedScene" id=2] + +[node name="InventoryWindow" type="Control"] +margin_right = 888.0 +margin_bottom = 463.0 + +[node name="BaseWindow" parent="." instance=ExtResource( 2 )] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_right = 0.0 +margin_bottom = 0.0 + +[node name="VSplitContainer" parent="BaseWindow/MarginContainer" index="0"] +margin_right = 888.0 +margin_bottom = 463.0 + +[node name="Header" parent="BaseWindow/MarginContainer/VSplitContainer" index="0"] +margin_right = 888.0 + +[node name="VSplitContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Header" index="0"] +margin_right = 888.0 + +[node name="MarginContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Header/VSplitContainer" index="0"] +margin_right = 888.0 + +[node name="HSplitContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Header/VSplitContainer/MarginContainer" index="0"] +margin_right = 886.0 + +[node name="Label" parent="BaseWindow/MarginContainer/VSplitContainer/Header/VSplitContainer/MarginContainer/HSplitContainer" index="0"] +margin_right = 826.0 + +[node name="Button" parent="BaseWindow/MarginContainer/VSplitContainer/Header/VSplitContainer/MarginContainer/HSplitContainer" index="1"] +margin_left = 826.0 +margin_right = 884.0 + +[node name="HSeparator" parent="BaseWindow/MarginContainer/VSplitContainer/Header/VSplitContainer" index="1"] +margin_right = 888.0 + +[node name="Content" parent="BaseWindow/MarginContainer/VSplitContainer" index="1"] +margin_right = 888.0 +margin_bottom = 463.0 + +[node name="PanelContainer" type="MarginContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content" index="0"] +margin_right = 888.0 +margin_bottom = 431.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer"] +margin_right = 888.0 +margin_bottom = 431.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="PanelContainer" type="PanelContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer"] +margin_right = 432.0 +margin_bottom = 431.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="ScrollContainer" type="ScrollContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 428.0 +margin_bottom = 427.0 + +[node name="ItemContainer" type="VBoxContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer/ScrollContainer"] +margin_right = 424.0 +margin_bottom = 47.0 +size_flags_horizontal = 3 + +[node name="ItemEntry" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer/ScrollContainer/ItemContainer" instance=ExtResource( 1 )] +margin_right = 424.0 +margin_bottom = 47.0 + +[node name="Filter" type="PanelContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer"] +margin_left = 440.0 +margin_right = 448.0 +margin_bottom = 431.0 +size_flags_vertical = 3 + +[node name="PanelContainer2" type="PanelContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer"] +margin_left = 456.0 +margin_right = 888.0 +margin_bottom = 431.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 428.0 +margin_bottom = 427.0 + +[node name="HeadSlot" type="PanelContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2/VBoxContainer"] +margin_right = 424.0 +margin_bottom = 8.0 + +[node name="MarginContainer" type="MarginContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2/VBoxContainer"] +margin_top = 16.0 +margin_right = 424.0 +margin_bottom = 24.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2/VBoxContainer/MarginContainer"] +margin_right = 424.0 +margin_bottom = 8.0 + +[node name="PanelContainer" type="PanelContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2/VBoxContainer/MarginContainer/HBoxContainer"] +margin_right = 8.0 +margin_bottom = 8.0 + +[node name="Control" type="Control" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2/VBoxContainer/MarginContainer/HBoxContainer"] +margin_left = 16.0 +margin_right = 408.0 +margin_bottom = 8.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="PanelContainer2" type="PanelContainer" parent="BaseWindow/MarginContainer/VSplitContainer/Content/PanelContainer/HBoxContainer/PanelContainer2/VBoxContainer/MarginContainer/HBoxContainer"] +margin_left = 416.0 +margin_right = 424.0 +margin_bottom = 8.0 + +[editable path="BaseWindow"] diff --git a/game/ui/windows/SpellBookWindow.gd b/game/ui/windows/SpellBookWindow.gd new file mode 100644 index 00000000..0284cb87 --- /dev/null +++ b/game/ui/windows/SpellBookWindow.gd @@ -0,0 +1,114 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var spell_entry_container_path : NodePath +export (NodePath) var prev_button_path : NodePath +export (NodePath) var next_button_path : NodePath +export (NodePath) var spell_points_label_path : NodePath + +var _spell_entry_container : Node +var _spell_entries : Array + +var _prev_button : Button +var _next_button : Button +var _spell_points_label : Label + +var _player : Entity + +var _page : int = 0 +var _max_pages : int = 0 +var _entity_data : EntityData +var _character_class : EntityClassData + +func _ready() -> void: + _spell_entries.clear() + + _spell_entry_container = get_node(spell_entry_container_path) + + for i in range(_spell_entry_container.get_child_count()): + _spell_entries.append(_spell_entry_container.get_child(i)) + + _prev_button = get_node(prev_button_path) + _next_button = get_node(next_button_path) + _spell_points_label = get_node(spell_points_label_path) + + _prev_button.connect("pressed", self, "dec_page") + _next_button.connect("pressed", self, "inc_page") + + connect("visibility_changed", self, "_visibility_changed") + +func inc_page() -> void: + if _character_class == null: + return + + _page += 1 + + if _page > _max_pages: + _page = _max_pages + + refresh_entries() + +func dec_page() -> void: + if _character_class == null: + return + + _page -= 1 + + if _page < 0: + _page = 0 + + refresh_entries() + +func refresh_entries() -> void: + if _character_class == null or _player == null: + return + + for i in range(len(_spell_entries)): + var spindex : int = i + (_page * len(_spell_entries)) + + if spindex >= _character_class.get_num_spells(): + _spell_entries[i].set_spell(_player, null) + continue + + var spell : Spell = _character_class.get_spell(spindex) + + _spell_entries[i].set_spell(_player, spell) + + +func refresh_all() -> void: + if _player == null: + return + + _entity_data = _player.centity_data + _character_class = _entity_data.entity_class_data + + if _character_class == null: + return + + _max_pages = int(_character_class.get_num_spells() / len(_spell_entries)) + + if _page > _max_pages: + _page = _max_pages + + _spell_points_label.text = "Free spell points: " + str(_player.getc_free_spell_points()) + + refresh_entries() + + +func _visibility_changed() -> void: + if visible: + refresh_all() + +func set_player(p_player: Entity) -> void: + if _player != null: + _player.disconnect("cfree_spell_points_changed", self, "cfree_spell_points_changed") + + _player = p_player + + _player.connect("cfree_spell_points_changed", self, "cfree_spell_points_changed") + +func cfree_spell_points_changed(entity: Entity, value: int) -> void: + _spell_points_label.text = "Free spell points: " + str(_player.getc_free_spell_points()) diff --git a/game/ui/windows/SpellBookWindow.tscn b/game/ui/windows/SpellBookWindow.tscn new file mode 100644 index 00000000..a3690753 --- /dev/null +++ b/game/ui/windows/SpellBookWindow.tscn @@ -0,0 +1,178 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://ui/windows/SpellContainer.tscn" type="PackedScene" id=1] +[ext_resource path="res://ui/windows/SpellBookWindow.gd" type="Script" id=4] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=5] + +[node name="SpellBookWindow" type="PanelContainer"] +margin_right = 884.0 +margin_bottom = 510.0 +theme = ExtResource( 5 ) +script = ExtResource( 4 ) +__meta__ = { +"_edit_use_anchors_": false +} +spell_entry_container_path = NodePath("PagedContent/GridContainer") +prev_button_path = NodePath("PagedContent/Controls/HBoxContainer/Button2") +next_button_path = NodePath("PagedContent/Controls/HBoxContainer/Button") +spell_points_label_path = NodePath("PagedContent/Controls/HBoxContainer/SpellPoints") + +[node name="PagedContent" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 880.0 +margin_bottom = 506.0 + +[node name="Header" type="HBoxContainer" parent="PagedContent"] +margin_right = 876.0 +margin_bottom = 30.0 + +[node name="Label" type="Label" parent="PagedContent/Header"] +margin_top = 7.0 +margin_right = 54.0 +margin_bottom = 22.0 +text = "Spellbook" + +[node name="HBoxContainer" type="HBoxContainer" parent="PagedContent/Header"] +margin_left = 58.0 +margin_right = 832.0 +margin_bottom = 30.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +alignment = 1 + +[node name="Button" type="Button" parent="PagedContent/Header/HBoxContainer"] +margin_left = 337.0 +margin_right = 437.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 100, 0 ) +text = "Nature" + +[node name="Button" type="Button" parent="PagedContent/Header"] +margin_left = 836.0 +margin_right = 876.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 40, 30 ) +text = "X" + +[node name="GridContainer" type="GridContainer" parent="PagedContent"] +margin_top = 38.0 +margin_right = 876.0 +margin_bottom = 464.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 2 + +[node name="SpellContainer" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 0.0 +margin_top = 0.0 +margin_right = 436.0 +margin_bottom = 67.0 + +[node name="SpellContainer2" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 440.0 +margin_top = 0.0 +margin_right = 876.0 +margin_bottom = 67.0 + +[node name="SpellContainer3" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 0.0 +margin_top = 71.0 +margin_right = 436.0 +margin_bottom = 138.0 + +[node name="SpellContainer4" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 440.0 +margin_top = 71.0 +margin_right = 876.0 +margin_bottom = 138.0 + +[node name="SpellContainer5" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 0.0 +margin_top = 142.0 +margin_right = 436.0 +margin_bottom = 209.0 + +[node name="SpellContainer6" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 440.0 +margin_top = 142.0 +margin_right = 876.0 +margin_bottom = 209.0 + +[node name="SpellContainer7" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 0.0 +margin_top = 213.0 +margin_right = 436.0 +margin_bottom = 280.0 + +[node name="SpellContainer8" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 440.0 +margin_top = 213.0 +margin_right = 876.0 +margin_bottom = 280.0 + +[node name="SpellContainer9" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 0.0 +margin_top = 284.0 +margin_right = 436.0 +margin_bottom = 351.0 + +[node name="SpellContainer10" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 440.0 +margin_top = 284.0 +margin_right = 876.0 +margin_bottom = 351.0 + +[node name="SpellContainer11" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 0.0 +margin_top = 355.0 +margin_right = 436.0 +margin_bottom = 422.0 + +[node name="SpellContainer12" parent="PagedContent/GridContainer" instance=ExtResource( 1 )] +margin_left = 440.0 +margin_top = 355.0 +margin_right = 876.0 +margin_bottom = 422.0 + +[node name="Controls" type="MarginContainer" parent="PagedContent"] +margin_top = 472.0 +margin_right = 876.0 +margin_bottom = 502.0 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="PagedContent/Controls"] +margin_left = 2.0 +margin_top = 2.0 +margin_right = 874.0 +margin_bottom = 28.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Button2" type="Button" parent="PagedContent/Controls/HBoxContainer"] +margin_right = 288.0 +margin_bottom = 26.269 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "< Previous page" + +[node name="SpellPoints" type="Label" parent="PagedContent/Controls/HBoxContainer"] +margin_left = 292.0 +margin_top = 5.0 +margin_right = 580.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +align = 1 +valign = 1 + +[node name="Button" type="Button" parent="PagedContent/Controls/HBoxContainer"] +margin_left = 584.0 +margin_right = 872.0 +margin_bottom = 26.269 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Next page >" +[connection signal="pressed" from="PagedContent/Header/Button" to="." method="hide"] diff --git a/game/ui/windows/SpellContainer.gd b/game/ui/windows/SpellContainer.gd new file mode 100644 index 00000000..96bcc80d --- /dev/null +++ b/game/ui/windows/SpellContainer.gd @@ -0,0 +1,86 @@ +extends Control + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export (NodePath) var icon_path : NodePath +export (NodePath) var name_label_path : NodePath +#export (NodePath) var description_label_path : NodePath +export (NodePath) var known_label_path : NodePath +export (NodePath) var learn_button_path : NodePath +export (NodePath) var spell_button_path : NodePath +export (NodePath) var popup_path : NodePath + + +var _icon : TextureRect +var _name_label : Label +#var _description_label : RichTextLabel +var _spell_button : Button +var _popup : Popup + +var _spell : Spell +var _player : Entity + +func _ready() -> void: + _icon = get_node(icon_path) as TextureRect + _name_label = get_node(name_label_path) as Label +# _description_label = get_node(description_label_path) as RichTextLabel + _spell_button = get_node(spell_button_path) as Button + _popup = get_node(popup_path) as Popup + +func set_spell(p_player : Entity, p_spell: Spell) -> void: + + if _player != null: + _player.disconnect("cspell_added", self, "cspell_added") + _player.disconnect("cspell_removed", self, "cspell_removed") + + _spell = p_spell + _player = p_player + + _player.connect("cspell_added", self, "cspell_added") + _player.connect("cspell_removed", self, "cspell_removed") + +# _icon.set_spell(_spell) + _spell_button.set_spell(_spell) + _popup.set_spell(_spell) + + if not _spell == null: + if _player.hasc_spell(p_spell): + get_node(known_label_path).show() + get_node(learn_button_path).hide() + else: + get_node(known_label_path).hide() + get_node(learn_button_path).show() + + _icon.texture = _spell.icon + _name_label.text = _spell.text_name + " (Rank " + str(_spell.rank) + ")" + else: + _icon.texture = null + + _name_label.text = "....." + +func learn_spell() -> void: + if _player == null or _spell == null: + return + + if _player.cfree_spell_points <= 0: + return + + _player.crequest_spell_learn(_spell.id) + +func cspell_added(entity: Entity, spell: Spell) -> void: + if spell == _spell: + get_node(known_label_path).show() + get_node(learn_button_path).hide() + +func cspell_removed(entity: Entity, spell: Spell) -> void: + if spell == _spell: + get_node(known_label_path).hide() + get_node(learn_button_path).show() + +func spell_button_pressed() -> void: + var pos : Vector2 = _spell_button.rect_global_position + pos.x += _spell_button.rect_size.x + + _popup.popup(Rect2(pos, _popup.rect_size)) diff --git a/game/ui/windows/SpellContainer.tscn b/game/ui/windows/SpellContainer.tscn new file mode 100644 index 00000000..f7f8830d --- /dev/null +++ b/game/ui/windows/SpellContainer.tscn @@ -0,0 +1,148 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/windows/SpellDragAndDropSpellBook.gd" type="Script" id=1] +[ext_resource path="res://ui/windows/SpellContainer.gd" type="Script" id=2] +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=3] +[ext_resource path="res://ui/spellbook/SpellEntryPopup.gd" type="Script" id=5] + +[node name="SpellContainer" type="Control"] +margin_left = 290.0 +margin_top = 306.0 +margin_right = 576.0 +margin_bottom = 370.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme = ExtResource( 3 ) +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} +icon_path = NodePath("PanelContainer/HBoxContainer/Button/CenterContainer/SpellIcon") +name_label_path = NodePath("PanelContainer/HBoxContainer/SpellName") +known_label_path = NodePath("SpellEntryPopup/VBoxContainer/PanelContainer") +learn_button_path = NodePath("SpellEntryPopup/VBoxContainer/LearnButton") +spell_button_path = NodePath("PanelContainer/HBoxContainer/Button") +popup_path = NodePath("SpellEntryPopup") + +[node name="PanelContainer" type="PanelContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 282.0 +margin_bottom = 60.0 + +[node name="Button" type="Button" parent="PanelContainer/HBoxContainer"] +margin_right = 55.0 +margin_bottom = 56.0 +rect_min_size = Vector2( 55, 55 ) +script = ExtResource( 1 ) + +[node name="CenterContainer" type="MarginContainer" parent="PanelContainer/HBoxContainer/Button"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 51.0 +margin_bottom = 51.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="SpellIcon" type="TextureRect" parent="PanelContainer/HBoxContainer/Button/CenterContainer"] +margin_right = 47.0 +margin_bottom = 47.0 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +expand = true + +[node name="SpellName" type="Label" parent="PanelContainer/HBoxContainer"] +margin_left = 63.0 +margin_top = 20.0 +margin_right = 278.0 +margin_bottom = 35.0 +size_flags_horizontal = 3 +text = "......" + +[node name="SpellEntryPopup" type="PopupPanel" parent="."] +margin_left = 64.0 +margin_top = 4.0 +margin_right = 360.0 +margin_bottom = 207.0 +script = ExtResource( 5 ) +__meta__ = { +"_edit_use_anchors_": false +} +label_path = NodePath("VBoxContainer/HBoxContainer/Label") +desc_label_path = NodePath("VBoxContainer/RichTextLabel") + +[node name="VBoxContainer" type="VBoxContainer" parent="SpellEntryPopup"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 4.0 +margin_top = 4.0 +margin_right = -4.0 +margin_bottom = -4.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="SpellEntryPopup/VBoxContainer"] +margin_right = 288.0 +margin_bottom = 26.0 + +[node name="Label" type="Label" parent="SpellEntryPopup/VBoxContainer/HBoxContainer"] +margin_top = 5.0 +margin_right = 250.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 + +[node name="Button" type="Button" parent="SpellEntryPopup/VBoxContainer/HBoxContainer"] +margin_left = 258.0 +margin_right = 288.0 +margin_bottom = 26.269 +rect_min_size = Vector2( 30, 0 ) +text = "X" + +[node name="HSeparator2" type="HSeparator" parent="SpellEntryPopup/VBoxContainer"] +margin_top = 34.0 +margin_right = 288.0 +margin_bottom = 42.0 + +[node name="PanelContainer" type="PanelContainer" parent="SpellEntryPopup/VBoxContainer"] +visible = false +margin_top = 50.0 +margin_right = 296.0 +margin_bottom = 80.0 +rect_min_size = Vector2( 0, 20 ) + +[node name="KnownLabel" type="Label" parent="SpellEntryPopup/VBoxContainer/PanelContainer"] +margin_left = 4.0 +margin_top = 7.0 +margin_right = 292.0 +margin_bottom = 22.0 +text = "Known" +align = 1 +valign = 1 + +[node name="LearnButton" type="Button" parent="SpellEntryPopup/VBoxContainer"] +margin_top = 50.0 +margin_right = 288.0 +margin_bottom = 76.269 +text = "Learn" + +[node name="RichTextLabel" type="RichTextLabel" parent="SpellEntryPopup/VBoxContainer"] +margin_top = 84.0 +margin_right = 288.0 +margin_bottom = 195.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +[connection signal="pressed" from="PanelContainer/HBoxContainer/Button" to="." method="spell_button_pressed"] +[connection signal="pressed" from="SpellEntryPopup/VBoxContainer/HBoxContainer/Button" to="SpellEntryPopup" method="hide"] +[connection signal="pressed" from="SpellEntryPopup/VBoxContainer/LearnButton" to="." method="learn_spell"] diff --git a/game/ui/windows/SpellDragAndDropSpellBook.gd b/game/ui/windows/SpellDragAndDropSpellBook.gd new file mode 100644 index 00000000..c4585d0a --- /dev/null +++ b/game/ui/windows/SpellDragAndDropSpellBook.gd @@ -0,0 +1,29 @@ +extends Button + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +var spell + +func set_spell(p_spell): + spell = p_spell + +func get_drag_data(pos): + if spell == null: + return null + + var tr = TextureRect.new() + tr.texture = spell.icon + tr.expand = true + +# tr.rect_size = rect_size + tr.rect_size = Vector2(45, 45) + set_drag_preview(tr) + + var esd = ESDragAndDrop.new() + + esd.type = ESDragAndDrop.ES_DRAG_AND_DROP_TYPE_SPELL + esd.item_id = spell.id + + return esd diff --git a/game/ui/windows/TalentWindow.gd b/game/ui/windows/TalentWindow.gd new file mode 100644 index 00000000..7707b6d7 --- /dev/null +++ b/game/ui/windows/TalentWindow.gd @@ -0,0 +1,80 @@ +extends PanelContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +export(PackedScene) var spec_scene : PackedScene +export(PackedScene) var spec_switcher_scene : PackedScene +export(NodePath) var spec_container_path : NodePath +export(NodePath) var spec_switcher_path : NodePath + +var _spec_container : Node +var _spec_switcher_container : Node + +var _data : EntityData +var _player : Entity + +func _ready(): + _spec_container = get_node(spec_container_path) + _spec_switcher_container = get_node(spec_switcher_path) + +func set_player(player : Entity) -> void: + if _player != null: + _player.disconnect("centity_data_changed", self, "centity_data_changed") + + _player = player + + if _player == null: + return + + _player.connect("centity_data_changed", self, "centity_data_changed") + + centity_data_changed(_player.centity_data) + + +func select_spec(index : int) -> void: + for ch in _spec_container.get_children(): + ch.hide() + + if _spec_container.get_child_count() <= index: + return + + _spec_container.get_child(index).show() + +func centity_data_changed(data: EntityData) -> void: + if _data == data: + return + + _data = data + + for ch in _spec_container.get_children(): + ch.queue_free() + _spec_container.remove_child(ch) + + for ch in _spec_switcher_container.get_children(): + ch.queue_free() + + if data == null or data.entity_class_data == null: + return + + var cd : EntityClassData = data.entity_class_data + + for i in range(cd.get_num_specs()): + var spec : CharacterSpec = cd.get_spec(i) + + if spec == null: + continue + +# var b : Node = spec_switcher_scene.instance() +# _spec_switcher_container.add_child(b) +# b.owner = _spec_switcher_container +# b.set_spec_index(self, i) + + var s : Node = spec_scene.instance() + _spec_container.add_child(s) + s.owner = _spec_container + s.name = spec.text_name + + s.set_spec(_player, spec, i) + diff --git a/game/ui/windows/TalentWindow.tscn b/game/ui/windows/TalentWindow.tscn new file mode 100644 index 00000000..c65d20e5 --- /dev/null +++ b/game/ui/windows/TalentWindow.tscn @@ -0,0 +1,76 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] +[ext_resource path="res://ui/talents/Spec.tscn" type="PackedScene" id=2] +[ext_resource path="res://ui/windows/TalentWindow.gd" type="Script" id=3] +[ext_resource path="res://ui/talents/talent_switcher_button.tscn" type="PackedScene" id=4] + +[node name="TalentWindow" type="PanelContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 1 ) +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} +spec_scene = ExtResource( 2 ) +spec_switcher_scene = ExtResource( 4 ) +spec_container_path = NodePath("VBoxContainer/TabContainer") +spec_switcher_path = NodePath("VBoxContainer/Header/SpecSwitcher") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 1020.0 +margin_bottom = 596.0 + +[node name="Header" type="HBoxContainer" parent="VBoxContainer"] +margin_right = 1016.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 0, 30 ) +alignment = 1 + +[node name="Label" type="Label" parent="VBoxContainer/Header"] +margin_top = 7.0 +margin_right = 42.0 +margin_bottom = 22.0 +text = "Talents" + +[node name="SpecSwitcher" type="HBoxContainer" parent="VBoxContainer/Header"] +margin_left = 50.0 +margin_right = 968.0 +margin_bottom = 30.0 +size_flags_horizontal = 3 +alignment = 1 + +[node name="Button" type="Button" parent="VBoxContainer/Header"] +margin_left = 976.0 +margin_right = 1016.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 40, 30 ) +text = "X" + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"] +visible = false +margin_top = 48.0 +margin_right = 1016.0 +margin_bottom = 576.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/MarginContainer"] +margin_right = 1016.0 +margin_bottom = 528.0 +scroll_horizontal_enabled = false + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/MarginContainer/ScrollContainer"] +margin_right = 1016.0 +size_flags_horizontal = 3 + +[node name="TabContainer" type="TabContainer" parent="VBoxContainer"] +margin_top = 38.0 +margin_right = 1016.0 +margin_bottom = 592.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +[connection signal="pressed" from="VBoxContainer/Header/Button" to="." method="hide"] diff --git a/game/ui/windows/VBoxContainer.gd b/game/ui/windows/VBoxContainer.gd new file mode 100644 index 00000000..db9e53ca --- /dev/null +++ b/game/ui/windows/VBoxContainer.gd @@ -0,0 +1,17 @@ +extends VBoxContainer + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/game/ui/windows/base/BaseWindow.tscn b/game/ui/windows/base/BaseWindow.tscn new file mode 100644 index 00000000..a5a7286c --- /dev/null +++ b/game/ui/windows/base/BaseWindow.tscn @@ -0,0 +1,79 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/theme/ui_theme.tres" type="Theme" id=1] + +[node name="BaseWindow" type="Panel"] +margin_right = 523.0 +margin_bottom = 427.0 +theme = ExtResource( 1 ) +__meta__ = { +"_edit_lock_": true +} + +[node name="MarginContainer" type="MarginContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_lock_": true +} + +[node name="VSplitContainer" type="VSplitContainer" parent="MarginContainer"] +margin_right = 523.0 +margin_bottom = 427.0 +dragger_visibility = 2 + +[node name="Header" type="MarginContainer" parent="MarginContainer/VSplitContainer"] +margin_right = 523.0 +margin_bottom = 32.0 + +[node name="VSplitContainer" type="VSplitContainer" parent="MarginContainer/VSplitContainer/Header"] +margin_right = 523.0 +margin_bottom = 32.0 +size_flags_horizontal = 3 +collapsed = true +dragger_visibility = 2 + +[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VSplitContainer/Header/VSplitContainer"] +margin_right = 523.0 +margin_bottom = 24.0 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 1 + +[node name="HSplitContainer" type="HSplitContainer" parent="MarginContainer/VSplitContainer/Header/VSplitContainer/MarginContainer"] +margin_left = 2.0 +margin_top = 2.0 +margin_right = 521.0 +margin_bottom = 23.0 +dragger_visibility = 2 + +[node name="Label" type="Label" parent="MarginContainer/VSplitContainer/Header/VSplitContainer/MarginContainer/HSplitContainer"] +margin_right = 485.0 +margin_bottom = 21.0 +size_flags_horizontal = 3 +size_flags_vertical = 5 +text = "Header" +valign = 1 + +[node name="Button" type="Button" parent="MarginContainer/VSplitContainer/Header/VSplitContainer/MarginContainer/HSplitContainer"] +margin_left = 485.0 +margin_right = 519.0 +margin_bottom = 21.0 +hint_tooltip = "Close" +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.07 +text = "X" + +[node name="HSeparator" type="HSeparator" parent="MarginContainer/VSplitContainer/Header/VSplitContainer"] +margin_top = 24.0 +margin_right = 523.0 +margin_bottom = 32.0 +size_flags_horizontal = 3 +size_flags_vertical = 0 + +[node name="Content" type="MarginContainer" parent="MarginContainer/VSplitContainer"] +margin_top = 32.0 +margin_right = 523.0 +margin_bottom = 427.0 diff --git a/game/ui/windows/base/PagedContentContainer.tscn b/game/ui/windows/base/PagedContentContainer.tscn new file mode 100644 index 00000000..b7ce2a60 --- /dev/null +++ b/game/ui/windows/base/PagedContentContainer.tscn @@ -0,0 +1,56 @@ +[gd_scene format=2] + +[node name="PagedContent" type="VSplitContainer"] +margin_right = 523.0 +margin_bottom = 400.0 +dragger_visibility = 2 + +[node name="Content" type="MarginContainer" parent="."] +margin_right = 523.0 +margin_bottom = 376.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 2 + +[node name="Controls" type="MarginContainer" parent="."] +margin_top = 376.0 +margin_right = 523.0 +margin_bottom = 400.0 +custom_constants/margin_right = 2 +custom_constants/margin_top = 2 +custom_constants/margin_left = 2 +custom_constants/margin_bottom = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Controls"] +margin_left = 2.0 +margin_top = 2.0 +margin_right = 521.0 +margin_bottom = 22.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Button2" type="Button" parent="Controls/HBoxContainer"] +margin_right = 154.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "< Previous page" + +[node name="MarginContainer" type="MarginContainer" parent="Controls/HBoxContainer"] +margin_left = 158.0 +margin_right = 359.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 1.3 + +[node name="Button" type="Button" parent="Controls/HBoxContainer"] +margin_left = 363.0 +margin_right = 519.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Next page >" diff --git a/game/ui/windows/base/ScrollContainer.tscn b/game/ui/windows/base/ScrollContainer.tscn new file mode 100644 index 00000000..f5ef79a3 --- /dev/null +++ b/game/ui/windows/base/ScrollContainer.tscn @@ -0,0 +1,22 @@ +[gd_scene format=2] + +[node name="ScrollContainer" type="HSplitContainer"] +editor/display_folded = true +margin_right = 523.0 +margin_bottom = 403.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +collapsed = true +dragger_visibility = 2 + +[node name="ScrollContainer" type="ScrollContainer" parent="."] +margin_right = 511.0 +margin_bottom = 403.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VScrollBar" type="VScrollBar" parent="."] +margin_left = 511.0 +margin_right = 523.0 +margin_bottom = 403.0 + diff --git a/game/ui/windows/inventory/ItemEntry.tscn b/game/ui/windows/inventory/ItemEntry.tscn new file mode 100644 index 00000000..ba1094a2 --- /dev/null +++ b/game/ui/windows/inventory/ItemEntry.tscn @@ -0,0 +1,54 @@ +[gd_scene format=2] + +[node name="ItemEntry" type="PanelContainer"] +margin_right = 398.0 +margin_bottom = 97.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +margin_left = 14.0 +margin_top = 14.0 +margin_right = 384.0 +margin_bottom = 83.0 + +[node name="PanelContainer" type="PanelContainer" parent="HBoxContainer"] +margin_right = 28.0 +margin_bottom = 69.0 + +[node name="TextureRect" type="TextureRect" parent="HBoxContainer/PanelContainer"] +margin_left = 14.0 +margin_top = 14.0 +margin_right = 14.0 +margin_bottom = 55.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer"] +margin_left = 36.0 +margin_right = 370.0 +margin_bottom = 69.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="PanelContainer" type="PanelContainer" parent="HBoxContainer/VBoxContainer"] +margin_right = 334.0 +margin_bottom = 53.0 + +[node name="Name" type="Label" parent="HBoxContainer/VBoxContainer/PanelContainer"] +margin_left = 14.0 +margin_top = 14.0 +margin_right = 320.0 +margin_bottom = 39.0 +text = "Sword of Big Damage" + +[node name="StatsGrid" type="GridContainer" parent="HBoxContainer/VBoxContainer"] +margin_top = 61.0 +margin_right = 334.0 +margin_bottom = 61.0 + +[node name="SpellsContainer" type="VBoxContainer" parent="HBoxContainer/VBoxContainer"] +margin_top = 69.0 +margin_right = 334.0 +margin_bottom = 69.0