From 47c38b20368d8247e36964f93781896a5bff8b7c Mon Sep 17 00:00:00 2001 From: JannisX11 Date: Sat, 25 Apr 2020 20:25:07 +0200 Subject: [PATCH] v3.5.0 --- .travis.yml | 2 +- .vscode/tasks.json | 15 + assets/logo_cutout.svg | 66 ++++ css/dialogs.css | 74 +++- css/general.css | 305 +--------------- css/panels.css | 451 ++++++------------------ css/setup.css | 12 +- css/spectrum.css | 10 - css/window.css | 561 ++++++++++++++++++++++++++++++ icon_full.png | Bin 0 -> 28359 bytes index.html | 126 +++---- js/animations.js | 257 +++++++++----- js/api.js | 52 +++ js/blockbench.js | 42 +-- js/boot_loader.js | 4 + js/desktop.js | 12 +- js/display_mode.js | 46 +++ js/interface/actions.js | 14 +- js/interface/dialog.js | 58 ++- js/interface/interface.js | 37 +- js/interface/menu.js | 151 +++----- js/interface/settings.js | 42 ++- js/interface/themes.js | 5 +- js/io/bbmodel.js | 16 +- js/io/bedrock.js | 92 +++-- js/io/bedrock_old.js | 43 +-- js/io/gltf.js | 152 +++++--- js/io/io.js | 219 +----------- js/io/java_block.js | 24 +- js/io/modded_entity.js | 462 +++++++++++++++++------- js/io/obj.js | 1 + js/io/optifine_jem.js | 1 + js/io/optifine_jpm.js | 1 + js/io/project.js | 238 +++++++++++++ js/io/skin.js | 266 +++++++++++--- js/outliner/cube.js | 46 +-- js/outliner/group.js | 11 +- js/outliner/locator.js | 24 +- js/outliner/outliner.js | 71 +++- js/outliner/tree.vue.js | 12 +- js/plugin_loader.js | 164 ++++++--- js/preview/canvas.js | 58 ++- js/preview/preview.js | 140 ++++++-- js/preview/transformer.js | 15 +- js/texturing/color.js | 386 ++++---------------- js/texturing/painter.js | 291 +++++++++------- js/texturing/texture_generator.js | 39 ++- js/texturing/textures.js | 158 +++++---- js/texturing/uv.js | 60 ++-- js/transform.js | 221 ++++++------ js/util.js | 21 +- js/web.js | 3 + lang/de.json | 38 +- lang/en.json | 51 ++- lang/es.json | 38 +- lang/fr.json | 38 +- lang/it.json | 74 ++-- lang/ja.json | 38 +- lang/nl.json | 162 +++++---- lang/pl.json | 220 ++++++------ lang/pt.json | 40 ++- lang/ru.json | 38 +- lang/sv.json | 42 ++- lang/zh.json | 40 ++- package.json | 5 +- service_worker.js | 51 +++ 66 files changed, 3841 insertions(+), 2611 deletions(-) create mode 100644 .vscode/tasks.json create mode 100644 assets/logo_cutout.svg create mode 100644 css/window.css create mode 100644 icon_full.png create mode 100644 js/io/project.js create mode 100644 service_worker.js diff --git a/.travis.yml b/.travis.yml index 549783c9..0293030e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ jobs: - electron-builder -w --ia32 --publish=always -c.productName='Blockbench_32bit' deploy: provider: releases - api_key: GH_TOKEN + api_key: $GH_TOKEN skip_cleanup: true file: dist/win-unpacked/resources/app.asar diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..4fee9549 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "dev", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/assets/logo_cutout.svg b/assets/logo_cutout.svg new file mode 100644 index 00000000..2670c08b --- /dev/null +++ b/assets/logo_cutout.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/css/dialogs.css b/css/dialogs.css index 5b90613f..e2e27ffc 100644 --- a/css/dialogs.css +++ b/css/dialogs.css @@ -32,7 +32,7 @@ background-color: var(--color-ui); color: inherit; border: none; - box-shadow: 0 0px 40px #000; + box-shadow: 0 0px 40px rgba(0, 0, 0, 0.5); left: unset; right: unset; bottom: unset; @@ -69,6 +69,7 @@ margin-top: 4px; margin-bottom: 4px; height: auto; + clear: both; } .dialog_bar::after { content: ""; @@ -89,6 +90,12 @@ .dialog_bar input[type=checkbox] { padding: 0 4px; } + .dialog_vector_group { + display: flex; + } + .dialog_vector_group > input { + min-width: 30px; + } .tab_bar { height: 30px; display: flex; @@ -173,6 +180,9 @@ } /*Settings Dialog*/ + dialog#settings { + width: min(100%, 600px); + } #settings_tab_bar { margin: -24px; margin-bottom: 0; @@ -254,7 +264,7 @@ padding-left: 4px; border: 1px solid var(--color-border); } - #settingslist input[type=text] { + #settingslist input[type=text], #settingslist input[type=password] { padding: 10px; margin-left: 5px; } @@ -265,14 +275,22 @@ #settingslist div.bar_select select { width: 100%; } - #settingslist li li i { + #settingslist li li .setting_icon i { font-size: 26pt; width: 34px; margin-top: -6px; } - #settingslist li li:hover i { + #settingslist li li:hover .setting_icon i { color: var(--color-light); } + .password_toggle { + display: inline-block; + margin-left: 4px; + margin-top: -1px; + width: 24px; + text-align: center; + vertical-align: text-bottom; + } /*Keybinds*/ #keybindlist { @@ -356,6 +374,9 @@ background-color: var(--color-back) !important; height: 56px; } + #css_editor { + border: 1px solid var(--color-border); + } /*About*/ #about_page_title { @@ -695,6 +716,47 @@ top: 30px; } + + +/*Toolbar Dialog*/ + #bar_item_list { + max-height: 400px; + margin-bottom: 20px; + overflow-y: scroll; + min-height: 80px; + border: 1px solid var(--color-border); + border-right: none; + } + #bar_item_list li { + padding: 4px; + } + #bar_item_list li:hover { + color: var(--color-light); + } + #bar_item_list li div.icon_wrapper { + display: inline-block; + height: 26px; + vertical-align: text-top; + } + #bar_item_list li:not(:hover) div.icon_wrapper.add, #bar_item_list li:hover div.icon_wrapper.normal { + display: none; + } + #bar_items_current { + background-color: var(--color-back); + overflow: hidden; + height: auto; + min-height: 34px; + border: 1px solid var(--color-border); + } + #bar_items_current li { + min-width: 20px; + } + #bar_items_current li .toolbar_separator { + width: 12px; + background-color: var(--color-button); + border: 1px solid var(--color-border); + } + /*Action Control*/ #action_selector { position: absolute; @@ -707,7 +769,7 @@ top: 200px; width: 360px; height: 42px; - box-shadow: 0 0 5px black; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); } #action_selector > input { width: 100%; @@ -727,7 +789,7 @@ color: var(--color-text); width: 340px; margin-left: 8px; - box-shadow: 0 0 5px black; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); } #action_selector > div > ul { background-color: var(--color-bright_ui); diff --git a/css/general.css b/css/general.css index f946c9a4..941a84f5 100644 --- a/css/general.css +++ b/css/general.css @@ -99,7 +99,7 @@ background-color: var(--color-dark) !important; } -/*General*/ +/*UI Elements*/ canvas.preview { background-repeat: no-repeat; } @@ -139,10 +139,16 @@ .list { background-color: var(--color-back); height: calc(100% - 86px); - width: calc(100% - 2px); + width: 100%; overflow-y: scroll; flex-grow: 1; } + #left_bar .list { + width: calc(100% - 2px); + } + .list::-webkit-scrollbar-track { + background: var(--color-back); + } ul.list_style li { list-style: initial; margin-left: 20px; @@ -167,7 +173,7 @@ padding: 0 12px; background-color: var(--color-bright_ui); color: var(--color-accent_text); - box-shadow: 0 0 2px black; + box-shadow: 0 0 2px rgba(0, 0, 0, 0.5);; text-align: center; overflow-wrap: break-word; cursor: default; @@ -190,7 +196,7 @@ max-width: 200px; background-color: var(--color-bright_ui); color: var(--color-accent_text); - box-shadow: 0 0 2px black; + box-shadow: 0 0 2px rgba(0, 0, 0, 0.5);; text-align: center; cursor: default; top: 40px; @@ -263,45 +269,6 @@ @-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } @keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } -/*Menu Bar*/ - ul#menu_bar { - height: 100%; - } - li.menu_bar_point { - font-size: 17px; - padding: 0 8px; - padding-top: 2px; - display: inline-block; - height: 29px; - font-weight: normal; - } - li.menu_bar_point.opened { - color: var(--color-light); - background: var(--color-accent); - } - li.menu_bar_point:hover { - color: var(--color-light); - } - - #mode_selector { - float: right; - font-size: 1.1em; - height: 30px; - } - #mode_selector li { - display: inline-block; - height: 30px; - margin: 0 5px; - overflow: hidden; - padding-top: 2px; - font-size: 18px; - } - #mode_selector li:hover { - color: var(--color-light); - } - #mode_selector li.selected { - border-bottom: 3px solid var(--color-accent); - } /*Actions*/ .toolbar { @@ -312,7 +279,7 @@ float: none; } .toolbar.narrow, .toolbar_wrapper.narrow > .toolbar { - width: auto; + width: fit-content; } .toolbar_wrapper.narrow .toolbar .content { float: left; @@ -328,14 +295,10 @@ .toolbar.vertical .toolbar_menu { height: 24px; padding: 0; - } - .toolbar_wrapper > .toolbar.vertical .tool .tooltip { - } .toolbar > .tool.toolbar_menu { float: right; width: 14px; - margin-left: -4px; } .toolbar > .tool.toolbar_menu > i { width: 16px; @@ -478,7 +441,7 @@ } .contextMenu li.parent::before { content: "\f105"; - display: inline-block; + display: block; font-family: 'Font Awesome 5 Free'; font-weight: 900; font-size: inherit; @@ -520,248 +483,4 @@ padding: 0; background-color: var(--color-text); } - @media (max-device-width: 480px) { - .contextMenu li.focused > .contextMenu.sub { - - } - } -/*Start Screen*/ - #start_screen { - flex-grow: 1; - } - #start_screen h3 { - margin: 0; - } - #start_screen .bar.next_to_title { - margin-top: -40px; - margin-right: -12px; - position: relative; - float: right; - } - #start_screen .recent_project { - margin: 2px 0; - display: flex; - } - #start_screen .recent_project .icon_wrapper { - flex-shrink: 0; - } - #start_screen .recent_project_name { - font-size: 1.1em; - overflow-x: hidden; - flex-shrink: 1; - flex-grow: 1; - margin: 0 4px; - } - #start_screen .recent_project_date { - flex-shrink: 0; - } - span.recent_project_date:before { - content: ""; - display: block; - position: absolute; - width: 16px; - height: 26px; - margin-left: -20px; - background: linear-gradient(90deg, transparent, var(--color-ui)); - } - - #start_screen .recent_project.thumbnail { - width: 242px; - height: 150px; - - width: 168px; - height: 128px; - position: relative; - float: left; - background-color: var(--color-back); - margin: 1px; - background-size: 150px; - background-repeat: no-repeat; - } - #start_screen .recent_project.thumbnail:hover { - background-color: var(--color-ui); - } - #start_screen .recent_project.thumbnail .recent_project_name { - font-size: 1em; - overflow-x: hidden; - flex-shrink: 1; - flex-grow: 1; - height: 24px; - right: 6px; - left: 6px; - bottom: 0; - position: absolute; - } - - #start_screen > content { - display: block; - margin-top: 40px; - max-width: 900px; - height: auto; - max-height: calc(100% - 80px); - margin-left: auto; - margin-right: auto; - background-color: var(--color-ui); - overflow-y: scroll; - image-rendering: auto; - } - #start_screen > content > section { - width: 100%; - height: auto; - display: flex; - position: relative; - } - #start_screen section left, #start_screen section right { - display: block; - padding: 24px; - max-height: 600px; - } - #start_screen section right > ul { - max-height: 465px; - overflow-y: auto; - padding-right: 5px; - } - #start_screen left { - flex-grow: 0; - background-size: cover; - } - #start_screen left i.graphic_icon { - font-size: 40px; - width: 12px; - margin-top: 6px; - } - #start_screen right { - flex-grow: 1; - } - #start_screen i.start_screen_close_button { - position: absolute; - top: 8px; - right: 8px; - } - #start_screen i.start_screen_close_button:not(:hover) { - opacity: 0.8; - } - @media (max-device-width: 480px) { - #start_screen { - width: calc(100% - 40px); - } - #start_screen > content { - margin-top: 0px; - margin-top: 0px; - margin-left: 0; - margin-right: 0; - max-height: 100%; - } - #start_screen > content > section { - display: block; - } - #start_screen content section right { - width: 100% !important; - float: none; - } - #start_screen content section left { - width: 100% !important; - float: none; - } - #start_screen content section left { - width: 100% !important; - float: none; - } - } - - - - #start-files li:hover { - color: var(--color-light); - } - #start-files left { - width: 36%; - } - #start-files right { - width: 64%; - border-left: 1px solid var(--color-border); - } - #start_screen left > ul { - margin-bottom: 16px; - } - #start_screen right i { - vertical-align: sub; - } - #start-files left li { - padding: 4px 0; - } - #start-files left span.icon_wrapper { - height: 22px; - } - #start-files left i { - font-size: 20pt; - height: 22px; - margin: 2px 12px 0px 0; - display: inline-block; - } - - -/*Toolbar Dialog*/ - #bar_item_list { - max-height: 400px; - margin-bottom: 20px; - overflow-y: scroll; - min-height: 80px; - border: 1px solid var(--color-border); - border-right: none; - } - #bar_item_list li { - padding: 4px; - } - #bar_item_list li:hover { - color: var(--color-light); - } - #bar_item_list li div.icon_wrapper { - display: inline-block; - height: 26px; - vertical-align: text-top; - } - #bar_item_list li:not(:hover) div.icon_wrapper.add, #bar_item_list li:hover div.icon_wrapper.normal { - display: none; - } - #bar_items_current { - background-color: var(--color-back); - overflow: hidden; - height: auto; - min-height: 34px; - border: 1px solid var(--color-border); - } - #bar_items_current li { - min-width: 20px; - } - #bar_items_current li .toolbar_separator { - width: 12px; - background-color: var(--color-button); - border: 1px solid var(--color-border); - } - -/*Status Bar*/ - #status_bar { - position: relative; - display: block; - background: var(--color-back); - } - #status_bar > div { - float: left; - padding-left: 6px; - padding-right: 6px; - } - #status_bar > div#status_fps { - float: right; - } - #status_bar > div#status_saved { - padding-top: 2px; - } - #status_bar #status_progress { - position: absolute; - height: 4px; - background: var(--color-accent); - bottom: 0; - left: 0; - } diff --git a/css/panels.css b/css/panels.css index d7c5d9cd..03029bbe 100644 --- a/css/panels.css +++ b/css/panels.css @@ -1,307 +1,4 @@ -/*Layout*/ - #page_wrapper { - display: grid; - grid-template-columns: 332px auto 314px; - grid-template-rows: 30px minmax(200px, 5000px) 26px; - grid-template-areas: - "left_bar toolbar toolbar" - "left_bar center right_bar" - "left_bar status_bar right_bar"; - height: calc(100% - 26px); - width: 100%; - border: 2px solid var(--color-border); - border-top: none; - } - #loading_error_message { - height: 100%; - width: 100%; - background-color: var(--color-dark); - border: 2px solid var(--color-accent); - text-align: center; - padding-top: 160px; - position: absolute; - z-index: 250; - } - - .sidebar { - background-color: var(--color-ui);; - display: flex; - flex-direction: column; - } - #left_bar { - grid-area: left_bar; - } - #right_bar { - grid-area: right_bar; - } - - .panel.grow { - display: flex; - flex-direction: column; - flex-grow: 1; - min-height: 133px; - } - .panel:not(:last-child) { - padding-bottom: 8px; - } - - h3.panel_handle { - width: 100%; - height: auto; - padding: 6px 12px; - background: var(--color-ui); - margin: 0; - } - .panel p { - margin-left: 12px; - } - body > h3.panel_handle { - box-shadow: 0 0 16px black; - width: auto; - } - - #center { - grid-area: center; - background-color: var(--color-dark); - overflow: hidden; - min-width: 100px; - display: flex; - flex-direction: column; - } - div#center > div { - max-height: 100%; - } - div#preview { - flex-grow: 1; - background-repeat: no-repeat; - background-size: 1000px; - position: relative; - } - #status_bar { - grid-area: status_bar; - } - .single_canvas_wrapper { - height: 100%; - width: 100%; - overflow: hidden; - position: absolute; - cursor: inherit; - } - .quad_canvas_wrapper { - height: 50%; - width: 50%; - position: absolute; - cursor: inherit; - } - .quad_canvas_wrapper.qcw_x { - border-right: 2px solid var(--color-grid); - } - .quad_canvas_wrapper.qcw_y { - border-bottom: 2px solid var(--color-grid); - } - .quad_canvas_wrapper:not(.qcw_x) { - right: 0; - } - .quad_canvas_wrapper:not(.qcw_y) { - bottom: 0; - } - - .resizer { - position: absolute !important; - z-index: 12; - } - .resizer.vertical { /* | */ - cursor: ew-resize; - width: 6px; - } - .resizer.horizontal { /* __ */ - cursor: ns-resize; - height: 6px; - } - .resizer.disabled { - pointer-events: none; - } - - - -/*Head Bars*/ - #main_toolbar { - background-color: var(--color-ui);; - grid-area: toolbar; - overflow: hidden; - white-space: nowrap; - display: flex; - } - #main_toolbar > * { - display: inline-block; - } - .toolbar_wrapper.tool_options { - flex-grow: 1; - } - header { - background-color: var(--color-border);; - grid-area: titlebar; - overflow: hidden; - display: flex; - white-space: nowrap; - height: 26px; - } - header > * { - display: inline-block; - height: 100%; - } - header ::-webkit-scrollbar { - height: 0; - } - div#title { - width: auto; - padding-right: 8px; - padding-left: 6px; - margin-left: 4px; - font-size: 1.2em; - font-weight: normal; - font-family: montserrat, arial, sans-serif; - color: var(--color-light); - vertical-align: top; - min-width: 62px; - margin-top: -0.6px; - } - div#title i { - display: none; - padding-top: 1px; - margin-left: 6px; - } - #title span { - min-width: 114px; - display: inline-block; - } - @media (max-width:950px) { - #title span { - display: none; - } - div#title i { - display: block; - } - } - - .app-drag-region { - -webkit-app-region: drag; - } - div#header_free_bar.app-drag-region { - flex-grow: 1; - } - div#header_free_bar.app-drag-region.resize_space { - margin-top: 4px; - height: calc(100% - 4px); - } - #web_download_button { - margin-left: auto; - height: 100%; - padding: 0; - } - #web_download_button a { - text-decoration: none !important; - height: 100%; - width: 100%; - padding: 0 12px; - } - #web_download_button:hover a { - color: var(--color-accent_text); - } - #windows_window_menu { - margin-left: auto; - } - #windows_window_menu li { - float: left; - display: inline-block; - width: 42px; - height: 100%; - text-align: center; - } - #windows_window_menu li:hover { - color: var(--color-light); - background-color: var(--color-selected); - } - #windows_window_menu li.wwm_r:hover { - background-color: var(--color-close); - } - #windows_window_menu li i:not(.material-icons) { - font-size: 10pt; - } - #windows_window_menu i.material-icons { - vertical-align: bottom; - } - #mac_window_menu { - width: 68px; - } - -/*Mobile*/ -@media (max-device-width: 480px) { - - #page_wrapper { - display: grid; - grid-template-rows: auto minmax(200px, 5000px) 26px; - grid-template-areas: - "toolbar" - "center" - "status_bar"; - grid-template-columns: auto !important; - border: none; - } - #main_toolbar { - display: block; - } - #main_toolbar > * { - display: block; - } - #main_toolbar > div.tools { - position: absolute; - z-index: 2; - bottom: 26px; - right: 0px; - } - #main_toolbar > div.mobile_side { - position: absolute; - z-index: 2; - top: 86px; - right: 0px; - } - #main_toolbar > div.tool_options { - background-color: var(--color-back); - } - .resizer.vertical { - display: none; - } - .sidebar { - overflow-y: auto; - } - #left_bar, #right_bar { - width: calc(100% - 40px); - display: none; - } - /*Left*/ - #page_wrapper.show_left { - grid-template-areas: "toolbar" "left_bar" "status_bar"; - } - #page_wrapper.show_left #center { - display: none; - } - #page_wrapper.show_left #left_bar { - display: flex; - } - /*Right*/ - #page_wrapper.show_right { - grid-template-areas: "toolbar" "right_bar" "status_bar"; - } - #page_wrapper.show_right #center { - display: none; - } - #page_wrapper.show_right #right_bar { - display: flex; - } -} - /*Display*/ .tabs_small input[type="radio"]:checked+label { @@ -317,7 +14,6 @@ text-align: center; font-size: 0.9em; flex-grow: 1; - float: left; overflow: hidden; } #color .tabs_small label { @@ -347,6 +43,7 @@ .bar.slider_input_combo { position: relative; display: flex; + margin-right: 2px; } .bar.slider_input_combo input.tool[type="range"] { float: none; @@ -406,6 +103,9 @@ text-align: center; width: 21px; } + .outliner_node .outliner_object i.icon_off { + opacity: 0.56; + } .outliner_opener_placeholder { width: 18px; height: 14px; @@ -416,6 +116,9 @@ padding: 2px; box-sizing: border-box; } + .outliner_object:active { + background-color: var(--color-ui); + } .outliner_object.selected { background-color: var(--color-selected); } @@ -436,6 +139,19 @@ position: absolute; bottom: 0px; } + #cubes_list ul { + position: relative; + } + #cubes_list .outliner_line_guide { + position: absolute; + top: -4px; + bottom: 4px; + width: 4px; + margin-left: 10px; + border-left: 2px solid var(--color-text); + opacity: 0.2; + pointer-events: none; + } .drag_hover[order]::before { content: ''; width: calc(100% - 12px); @@ -482,10 +198,10 @@ font-size: 15px; float: right; } - #cubes_list .outliner_object i.icon-open-state { + i.icon-open-state { opacity: 0.7; } - #cubes_list .outliner_object i.icon-open-state:hover { + i.icon-open-state:hover { opacity: 1; } @@ -735,14 +451,28 @@ #timeline_playhead { position: absolute; pointer-events: none; + z-index: 3; + height: 26px; width: 18px; top: 0; margin-left: -8px; - border: 2px solid var(--color-accent); - border-top-width: 5px; - background-color: rgba(0, 0, 0, 0.2); - z-index: 3; + + border-right: 9px solid transparent; + border-left: 9px solid transparent; + border-top: 12px solid var(--color-accent); + border-radius: 2px; + } + #timeline_playhead::after { + content: ""; + display: block; + position: absolute; + width: 2px; + background-color: var(--color-accent); + pointer-events: none; + margin-left: -1px; + margin-top: -2px; + height: 17px; } #timeline_playhead_line { content: ""; @@ -754,6 +484,21 @@ background-color: var(--color-accent); pointer-events: none; } + #timeline_endbracket { + position: absolute; + z-index: 3; + cursor: pointer; + + height: 26px; + width: 8px; + top: 0; + margin-left: -7px; + + border: 1px solid var(--color-accent); + border-left-width: 0; + border-right-width: 2px; + } + #timeline_body .keyframe { position: absolute; margin-left: -6px; @@ -797,26 +542,53 @@ padding: 3px; padding-left: 8px; overflow: hidden; + background-color: var(--color-back); + z-index: 4; } #timeline_time_wrapper { height: 100%; position: relative; - background-color: var(--color-button); - overflow: hidden; + background-color: var(--color-back); } #timeline_time { height: 100%; position: relative; margin-left: 8px; + border-bottom: 1px solid var(--color-selected); } .timeline_timecode { - border-left: 1px solid var(--color-border); padding-left: 4px; padding-top: 2px; height: 100%; position: absolute; pointer-events: none; } + .timeline_timecode > span { + display: block; + margin-top: -4px; + font-size: 0.9em; + margin-left: -6px; + } + .timeline_timecode > .substeps { + width: 100%; + height: 8px; + position: absolute; + bottom: 0; + left: 0; + display: flex; + } + .timeline_timecode > .substeps > div { + border-left: 1px solid var(--color-text); + height: 4px; + flex-grow: 1; + margin-top: 4px; + opacity: 0.3; + } + .timeline_timecode > .substeps > div:first-child { + height: 100%; + margin-top: 0; + opacity: 0.48; + } #timeline_body_inner { @@ -840,6 +612,7 @@ height: calc(100% + 1px); background-color: var(--color-ui); border-right: 1px solid var(--color-border); + border-left: 2px solid transparent; box-shadow: 1px 8px 10px 0 #00000038; z-index: 5; } @@ -849,6 +622,9 @@ #timeline_body li > .animator_channel_bar .channel_head { padding-left: 16px; } + .animator.selected .channel_head { + border-left-color: var(--color-accent); + } .channel_head .text_button { width: 26px; height: 24px; @@ -862,12 +638,6 @@ .animator_channel_bar .channel_head .text_button .channel_mute { font-size: 11pt; } - .animator.selected .animator_head_bar { - background-color: var(--color-selected); - } - .animator.selected .animator_head_bar .channel_head { - background-color: var(--color-selected); - } .channel_head span { flex-grow: 1; flex-shrink: 1; @@ -895,6 +665,9 @@ .UVEditor { position: relative; } + dialog .UVEditor { + z-index: 20; + } .UVEditor > .toolbar { margin-top: 3px; } @@ -909,7 +682,11 @@ margin-left: -8px; margin-right: -8px; } - .uv_headline.selected { + #uv_dialog_all .UVEditor.selected { + border-color: var(--color-accent); + z-index: 21; + } + .UVEditor.selected .uv_headline { background-color: var(--color-button); } .uv_headline .tool { @@ -1089,7 +866,7 @@ color: var(--color-accent_text); } -/*Edit Session UI*/ +/*Chat*/ #chat { z-index: 16; min-height: 180px; @@ -1149,9 +926,6 @@ } /*Color*/ - .panel#color { - - } #color_panel_head { display: flex; width: 100%; @@ -1200,33 +974,28 @@ width: 36px; } #palette_list { - padding: 2px 1px; + padding: 2px; min-height: 160px; max-height: 232px; } #palette_list .color { display: inline-block; - float: left; - width: 30px; - height: 30px; - padding: 3px; + width: 25px; + height: 25px; + vertical-align: top; } #palette_list .color:hover { - background-color: var(--color-selected); - } - #palette_list .color.selected { padding: 1px; } - #palette_list .color .color_inner { - width: 24px; - height: 24px; - border-radius: 50%; + #palette_list .color.selected { + padding: 3px; } - #palette_list .color.selected .color_inner { - border-radius: 4px; - transition: border-radius 20ms ease; - width: 28px; - height: 28px; + #palette_list .color.contrast { + background-color: var(--color-text); + } + #palette_list .color .color_inner { + width: 100%; + height: 100%; } .panel#color input.sp-input { width: calc(100% - 40px); diff --git a/css/setup.css b/css/setup.css index e83ae8c8..33c1b367 100644 --- a/css/setup.css +++ b/css/setup.css @@ -22,7 +22,7 @@ width: 6px; height: 6px; } - + ::-webkit-scrollbar-track { background: var(--color-ui); } @@ -138,7 +138,6 @@ [class^="icon-"]:not(.fa), [class*=" icon-"]:not(.fa) { /* use !important to prevent issues with browser extensions that change fonts */ font-family: 'icomoon' !important; - speak: none; font-style: normal; font-weight: normal; font-variant: normal; @@ -147,7 +146,6 @@ font-size: 1.4em; max-width: 24px; - Better Font Rendering =========== -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } @@ -399,7 +397,7 @@ appearance: none; border: none; background: transparent; - color: var(--color-text) + color: var(--color-text); font-size: 1em; font-family: inherit; outline: none; @@ -419,6 +417,7 @@ padding-right: 16px; padding-left: 16px; font-weight: normal; + cursor: pointer; } button.disabled { opacity: 0.5; @@ -503,13 +502,16 @@ right: 6px; top: 3px; } - input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button, { + input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { -webkit-appeareance: none; } input[type=range] { background-color: var(--color-back); height: 30px; } + input[type=password] { + font-size: 1.2em; + } input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; diff --git a/css/spectrum.css b/css/spectrum.css index fa1de35a..97580877 100644 --- a/css/spectrum.css +++ b/css/spectrum.css @@ -150,10 +150,6 @@ License: MIT height: 28px; } -.sp-container:not(.sp-alpha-enabled) .sp-top { - /*margin-bottom: -20px;*/ -} - /* Don't allow text selection */ .sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { -webkit-user-select:none; @@ -444,12 +440,6 @@ See http://bgrins.github.io/spectrum/themes/ for instructions. /* Buttons: http://hellohappy.org/css3-buttons/ */ -.sp-container button { - -} -.sp-container button:hover { - -} .sp-cancel { font-size: 11px; margin:0; diff --git a/css/window.css b/css/window.css new file mode 100644 index 00000000..ceaadd5a --- /dev/null +++ b/css/window.css @@ -0,0 +1,561 @@ + +/*Layout*/ + #page_wrapper { + display: grid; + grid-template-columns: 332px auto 314px; + grid-template-rows: 30px minmax(200px, 5000px) 26px; + grid-template-areas: + "left_bar toolbar toolbar" + "left_bar center right_bar" + "left_bar status_bar right_bar"; + height: calc(100% - 26px); + width: 100%; + border: 2px solid var(--color-frame); + border-top: none; + opacity: 1; + transition: opacity 0.1s linear; + } + #page_wrapper.hidden { + opacity: 0; + } + body { + background-image: url('../assets/logo_cutout.svg'); + background-repeat: no-repeat; + background-size: 128px; + background-position: center; + } + #loading_error_message { + height: 100%; + width: 100%; + background-color: var(--color-dark); + border: 2px solid var(--color-accent); + text-align: center; + padding-top: 160px; + position: absolute; + z-index: 250; + } + + .sidebar { + background-color: var(--color-ui);; + display: flex; + flex-direction: column; + } + #left_bar { + grid-area: left_bar; + } + #right_bar { + grid-area: right_bar; + } + + .panel.grow { + display: flex; + flex-direction: column; + flex-grow: 1; + min-height: 133px; + } + .panel:not(:last-child) { + padding-bottom: 8px; + } + + h3.panel_handle { + width: 100%; + height: auto; + padding: 6px 12px; + background: var(--color-ui); + margin: 0; + } + .panel p { + margin-left: 12px; + } + body > h3.panel_handle { + box-shadow: 0 0 16px black; + width: auto; + } + + #center { + grid-area: center; + background-color: var(--color-dark); + overflow: hidden; + min-width: 100px; + display: flex; + flex-direction: column; + } + div#center > div { + max-height: 100%; + } + div#preview { + flex-grow: 1; + background-repeat: no-repeat; + background-size: 1000px; + position: relative; + } + #status_bar { + grid-area: status_bar; + } + .single_canvas_wrapper { + height: 100%; + width: 100%; + overflow: hidden; + position: absolute; + cursor: inherit; + } + .quad_canvas_wrapper { + height: 50%; + width: 50%; + position: absolute; + cursor: inherit; + } + .quad_canvas_wrapper.qcw_x { + border-right: 2px solid var(--color-grid); + } + .quad_canvas_wrapper.qcw_y { + border-bottom: 2px solid var(--color-grid); + } + .quad_canvas_wrapper:not(.qcw_x) { + right: 0; + } + .quad_canvas_wrapper:not(.qcw_y) { + bottom: 0; + } + + .resizer { + position: absolute !important; + z-index: 12; + } + .resizer.vertical { /* | */ + cursor: ew-resize; + width: 6px; + margin-left: -4px; + } + .resizer.horizontal { /* __ */ + cursor: ns-resize; + height: 6px; + margin-top: -4px; + } + .resizer.disabled { + pointer-events: none; + } + /* + .resizer:hover, .resizer.ui-draggable-dragging { + background-color: var(--color-accent); + opacity: 0.2; + }*/ + + + +/*Head Bars*/ + #main_toolbar { + background-color: var(--color-ui);; + grid-area: toolbar; + overflow: hidden; + white-space: nowrap; + display: flex; + } + #main_toolbar > * { + display: inline-block; + } + .toolbar_wrapper.tool_options { + flex-grow: 1; + } + header { + background-color: var(--color-frame); + grid-area: titlebar; + overflow: hidden; + display: flex; + white-space: nowrap; + height: 26px; + } + header > * { + display: inline-block; + height: 100%; + } + header ::-webkit-scrollbar { + height: 0; + } + div#title { + width: auto; + padding-right: 8px; + padding-left: 6px; + margin-left: 4px; + font-size: 1.2em; + font-weight: normal; + font-family: montserrat, arial, sans-serif; + color: var(--color-light); + vertical-align: top; + min-width: 62px; + margin-top: -0.6px; + } + div#title i { + display: none; + padding-top: 1px; + margin-left: 6px; + } + #title span { + min-width: 114px; + display: inline-block; + } + @media (max-width:950px) { + #title span { + display: none; + } + div#title i { + display: block; + } + } + + .app-drag-region { + -webkit-app-region: drag; + } + div#header_free_bar.app-drag-region { + flex-grow: 1; + } + div#header_free_bar.app-drag-region.resize_space { + margin-top: 4px; + height: calc(100% - 4px); + } + #web_download_button { + margin-left: auto; + height: 100%; + padding: 0; + } + #web_download_button a { + text-decoration: none !important; + height: 100%; + width: 100%; + padding: 0 12px; + } + #web_download_button:hover a { + color: var(--color-accent_text); + } + #windows_window_menu { + margin-left: auto; + } + #windows_window_menu li { + display: inline-block; + width: 42px; + height: 100%; + text-align: center; + } + #windows_window_menu li:hover { + color: var(--color-light); + background-color: var(--color-selected); + } + #windows_window_menu li.wwm_r:hover { + background-color: var(--color-close); + } + #windows_window_menu li i:not(.material-icons) { + font-size: 10pt; + } + #windows_window_menu i.material-icons { + vertical-align: bottom; + } + #mac_window_menu { + width: 68px; + } + +/*Mobile*/ +@media (max-device-width: 480px) { + + #page_wrapper { + display: grid; + grid-template-rows: auto minmax(200px, 5000px) 26px; + grid-template-areas: + "toolbar" + "center" + "status_bar"; + grid-template-columns: auto !important; + border: none; + } + #main_toolbar { + display: block; + } + #main_toolbar > * { + display: block; + } + #main_toolbar > div.tools { + position: absolute; + z-index: 2; + bottom: 26px; + right: 0px; + } + #main_toolbar > div.mobile_side { + position: absolute; + z-index: 2; + top: 86px; + right: 0px; + } + #main_toolbar > div.tool_options { + background-color: var(--color-back); + } + .resizer.vertical { + display: none; + } + .sidebar { + overflow-y: auto; + } + #left_bar, #right_bar { + width: calc(100% - 40px); + display: none; + } + /*Left*/ + #page_wrapper.show_left { + grid-template-areas: "toolbar" "left_bar" "status_bar"; + } + #page_wrapper.show_left #center { + display: none; + } + #page_wrapper.show_left #left_bar { + display: flex; + } + /*Right*/ + #page_wrapper.show_right { + grid-template-areas: "toolbar" "right_bar" "status_bar"; + } + #page_wrapper.show_right #center { + display: none; + } + #page_wrapper.show_right #right_bar { + display: flex; + } +} + +/*Menu Bar*/ + ul#menu_bar { + height: 100%; + } + li.menu_bar_point { + font-size: 17px; + padding: 0 8px; + padding-top: 2px; + display: inline-block; + height: 29px; + font-weight: normal; + } + li.menu_bar_point.opened { + color: var(--color-light); + background: var(--color-accent); + } + li.menu_bar_point:hover { + color: var(--color-light); + } + + #mode_selector { + float: right; + font-size: 1.1em; + height: 30px; + } + #mode_selector li { + display: inline-block; + height: 30px; + margin: 0 5px; + overflow: hidden; + padding-top: 2px; + font-size: 18px; + } + #mode_selector li:hover { + color: var(--color-light); + } + #mode_selector li.selected { + border-bottom: 3px solid var(--color-accent); + } + + + +/*Start Screen*/ + #start_screen { + flex-grow: 1; + } + #start_screen h3 { + margin: 0; + } + #start_screen .bar.next_to_title { + margin-top: -40px; + margin-right: -12px; + position: relative; + float: right; + } + #start_screen .recent_project { + margin: 2px 0; + display: flex; + } + #start_screen .recent_project .icon_wrapper { + flex-shrink: 0; + } + #start_screen .recent_project_name { + font-size: 1.1em; + overflow-x: hidden; + flex-shrink: 1; + flex-grow: 1; + margin: 0 4px; + } + #start_screen .recent_project_date { + flex-shrink: 0; + } + span.recent_project_date:before { + content: ""; + display: block; + position: absolute; + width: 16px; + height: 26px; + margin-left: -20px; + background: linear-gradient(90deg, transparent, var(--color-ui)); + } + + #start_screen .recent_project.thumbnail { + width: 242px; + height: 150px; + + width: 168px; + height: 128px; + position: relative; + float: left; + background-color: var(--color-back); + margin: 1px; + background-size: 150px; + background-repeat: no-repeat; + } + #start_screen .recent_project.thumbnail:hover { + background-color: var(--color-ui); + } + #start_screen .recent_project.thumbnail .recent_project_name { + font-size: 1em; + overflow-x: hidden; + flex-shrink: 1; + flex-grow: 1; + height: 24px; + right: 6px; + left: 6px; + bottom: 0; + position: absolute; + } + + #start_screen > content { + display: block; + margin-top: 40px; + max-width: 1000px; + height: auto; + max-height: calc(100% - 80px); + margin-left: auto; + margin-right: auto; + background-color: var(--color-ui); + overflow-y: scroll; + image-rendering: auto; + } + #start_screen > content > section { + width: 100%; + height: auto; + display: flex; + position: relative; + } + #start_screen section left, #start_screen section right { + display: block; + padding: 24px; + max-height: 600px; + } + #start_screen section right > ul { + max-height: 465px; + overflow-y: auto; + padding-right: 5px; + } + #start_screen left { + flex-grow: 0; + background-size: cover; + } + #start_screen left i.graphic_icon { + font-size: 40px; + width: 12px; + margin-top: 6px; + } + #start_screen right { + flex-grow: 1; + } + #start_screen i.start_screen_close_button { + position: absolute; + top: 8px; + right: 8px; + } + #start_screen i.start_screen_close_button:not(:hover) { + opacity: 0.8; + } + @media (max-device-width: 480px) { + #start_screen { + width: calc(100% - 40px); + } + #start_screen > content { + margin-top: 0px; + margin-top: 0px; + margin-left: 0; + margin-right: 0; + max-height: 100%; + } + #start_screen > content > section { + display: block; + } + #start_screen content section right { + width: 100% !important; + float: none; + } + #start_screen content section left { + width: 100% !important; + float: none; + } + #start_screen content section left { + width: 100% !important; + float: none; + } + } + + + + #start-files li:hover { + color: var(--color-light); + } + #start-files left { + width: 38%; + } + #start-files right { + border-left: 1px solid var(--color-border); + } + #start_screen left > ul { + margin-bottom: 16px; + } + #start_screen right i { + vertical-align: sub; + } + #start-files left li { + padding: 4px 0; + } + #start-files left span.icon_wrapper { + height: 22px; + } + #start-files left i { + font-size: 20pt; + height: 22px; + margin: 2px 12px 0px 0; + display: inline-block; + } + +/*Status Bar*/ + #status_bar { + position: relative; + display: block; + background: var(--color-back); + } + #status_bar > div { + float: left; + padding-left: 6px; + padding-right: 6px; + } + #status_bar > div#status_fps { + float: right; + } + #status_bar > div#status_saved { + padding-top: 2px; + } + #status_bar #status_progress { + position: absolute; + height: 4px; + background: var(--color-accent); + bottom: 0; + left: 0; + } diff --git a/icon_full.png b/icon_full.png new file mode 100644 index 0000000000000000000000000000000000000000..376c90b1479df8f16e6d951fc2aed70e766debaf GIT binary patch literal 28359 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 z z*=v1idvZLf18@R>iUOs1MG{BJ2d@_A+e@0NvSdCr>fGk4>tP$mJ?F>>VQIQwTWx4z zbQ&q45FQ;Qns=X}s7F)}vdwi^{$k-#)?ZFdr)NqEr~KW;VkbenU}k88T9qHE+?6Yo z`LkmD?f00v9-KIL$`T(B77Y4OjE0W-j-5i8()RwHaA%!CdZ}W8ZP zYn$+=I8-R4YjE@of4%b$ceTH=SJi=pwE_$Lw;^poL`Qe zWNl66~ zF4$K@V+YL6{Bj^wl-VWMnyG=F>ioJ3@7DJlVO`9a#$X!IOCZsc@RArp5068$P-J9H zGxj5F7+343u2MBeL_sjByX(tnxi_dfYGr|Zh2hFglk-DT^At$ik{er*2x<@<=6r*N zQ&p#iIoFi=sDhHrq;3#fBdf4I2t4`qAO7_*6WW{L<29=qlekE~FCObB5OH?__`JHv zPybniXXbfjQ(f7Madf&)q~QhvX$Lp+zj?|C_V9H>ETUNX*pYY|$a@>DAOyOJ0SGj>0-?Cew3V|IKQI~5t(VRRzy{m zRsE^U8eY3MyLxizY zoN791PzHg4RkaDS#Hk93+M+H4n$J6o@4_RJKEwx;D?qes8sVtL>~-n-U??;A z6Tbwpo0kl0&tn=cp{KN#lkje8QDZ5^A$WtbkERu?Dcqp^MV0dz4!b*fdExs}nI$*c zgufm}+O~W(ut+^g@O^ACPC8~SEY0D)qAMDLt(oK=yTEFtVQ}+G z_{leHg0K$^es}u`VsotFH^m$xLd}|`bu?@6u*iy~@8i`~tkT`Ee9mQW39I7Fyayyk z(=op6sMy6*72XaD_JNb+;`dt^&X@7A5;O9oDFT#;4Sk7&*`;I=%tP5(qi@fcqso5N zP@rh4jPLgL6bD0)qEA?j+tOm_U6dhMq|>Q^0r*QT2%8-UXGP^C!h1G9W41+w^pgbg=)n-K?5$^8{rf4biW0G zsWEXceT9FeE?Kz{LWkp*8dAwe_36mqvb-xeH`RF?i-AA7YiqK&>3VC($#>R6^btz{k*cz>K&B{9NF_9b@2WzE{B+uP zr&uQ1CPb0=Gk#zt zLz~-$_xE1#g+ejeXz`3Q+kbna*3Y{li^DH~xRY!seS~K^GV)Z$VR0V=`$w_B7~y*` z<&a}gi^j`=(=?fW84{?Er@>QzaN4nvA!?7kCbA$xOt&SF^yeI3M`r<|%DrD1{XgCG zo3otQ7RMq)K^fbD(CJozN-@=$@th*Lz1NQ)1g*>6;&)95DEcs=^``Pjj6I)wb` z0!DVsos}j+OnBxVMU^g6uzkC!Rh7YmrTs?&X%RYpdAs1tyQA{Kxo7G3D&1^#r{!fZ zJfoWOfjbx@-f_kL`HU5}p}VM)AEFI;4ri|pwe>(3Ddje|R_y&aY%X}$oS$w-a#wSl z-s|*Y;Ny1kOaeK&j68pbY56)D2(x|vUPbQx`~RB;yv_hV2PBKg4nj%48BfPhzv&f> z;Jk@jwEg$_Ci;CfBh%3C&?bUm(rxlV!*{38s2Hfi z+!iIN7eiEL^;5&HB#lLdILf$@Z#0YjsWux1d}15*zBcTL+@XdFIMRLd$fk)hMRuX3 zl#qTymu5;OQ6(J{O?xCG@;I0vCeEH^K*#CIS^$2NvWfT-y1J5mS0Ts8L&W%(L_?+Hy3EycUG;wJD=l4be(WuC}@96nm-@-N2yroeyT)GAJU?eJqJ|Oj&(& zH~5D8zLb^I8`ZtGy_@I8Fiwed${?~*h@h|>KbM{U=sW~ zq(LxKkdXw)|2xKMsls0+$j-95ZUBIa``-xyvOg2P3K8Aq6r~Wi;2?Mi7&I99d9NZO zcPSnB_fC$EmLJ`L_pX+v?v@smUbgNwlrnOPD%!yq1OPw@$VrN8crPAx+oqAudC=dk zWa^@3fRSMHNLVDG5X$~9a`Lovzc;AIQmV;qcbdwYo0vQ&=QEbYO4%N6NtaSsb@z{_ zR~pKX$rti$t8!wOJ@vWGADUz<*g$_I`A5aUqD}z7gf`1;7OMT%H?ef+=V|w>I`~&zchu)#V7bL2yP> zazW1eA%v7AP1NJGVS!+=F*>TV=QR4TKEoo=vi%Q>;OIPNIE2BAHU$5r9`g3+0vIu) z1UUNZ`{7ljKN1Q-7#b4f66F&C(?dhBT4(U-^xD5&c}AGRxBZ)tzh;t2MF<^=;5&l= zW4b2rK_xOsa;zWbzhDf;r4u}0_4t)ufA3@Ue+%vncc?;&Xkj6VZ2O{;$w3qb z?*PfZkhV_?+FWpW6y?ewUxd+TZ1HS;l`x24G@?6o>x0LUpet&~E%aM7wB7c{nX3NF z?<_#UF!bI5W1x}SS6)^w(Tq#Kn+w(b9Dl?x2UoU(k4|0bRzgr1Lj;jN;og3RP;N%J$?Q~Q+EL<@9-bfU zHUF+4#tyTCl9Hsz(iSNM0|;a1h%zctC6;DZd9-j}DUr8si+v1(-ey{n^;`oTh$pQ>CdD`(1NkqW(l4>%X za_yUzH1WT}^Rz%FSe6RJqvBPmz!#*F*J>5b9^7-Nuq1=C29Z+fL7h_INizK*RR7%W zB|l~;9#aWhMBht~&3b&2C@d3Ag?&JirwLJLVe@7R7bij%y~18urUu<{3mtuXCc{XQ zd7=qk^G@=3>Vviejuh{=>z==8!?$EL=9hqXQb;(p^}`gT)&{h0FDglK>C0hOn*Eak zbe!o=k#5h1)~i9se;+W76jt1Voc~CC;8HmW&i?}bLka6;_?^FDqM(g^ryrn>S!+19 zRMweup+*xEI08@Fqp*zxQ-A^<^FK>xnF`R6=7U zj6%EJqI0!!1thciRrqjgqA>e9K8&liytMaESKf6f%)v!mu#c4?zJ3PT?12HRiZ}&E zAY-hzu|8pLwoWru);F;S4+4l$(B=yX`_s89ts6s17`rlD0uQDod7OEl;6shq9JPPo zaT?{mpVmC%zJthq|LT4Ys>(K@1j8CL$tQ#6AG)1^A}PDwa6yyEu&OqFZ)jd4Vh~O3 zRcnnO`hI`$GYsj^vafz_Z-ghSPu}Xff{oDZc`x@|#nN2uE<14J-HMOE)v64R`}uo) z{Jb5p|9-AXB?{RWoH?EbcT=hN_UuGQ3<*f?B;~h^)D|f|R|6cny1G2y^(_a0*M8?k z=9;jk^OGuP=%YK|)ate>0gKJgnrScBY+HD63Yylz?7gF3JAvgyhOu=7=YL90e#&z# zkGt%!-gq%po;#Uec?YXL$o9w zKVNS7%OBtUb2YARR>K)M+G+&H7FCU-2slPs8HYbJS9gNcs#1$W7+j<3oqLhAGK=o#;R3{-G-L45f^d$ zypQn$KZxBrczBT~%}_xaxLs%YPk*m6NlIKUhQF-$X0l~Rele$6|E|~W4w8;osk`4x zZoJ*g?}bqq*#vWz^e#=s-*sTe+eHFxA~=klW^pJ_1wyncO!+y}`9cb+BpIvpz#N5} zUQi3?P&BYB+#uLb+;}B)*f9LrEWZDl%nBpuhRs~jG5)F9W3%t{wllY&x?gNz5?`>SP)X-?oc!fKhw z6U2V~hc$1SF5d9jIU-EyJf3Z1?epv{8){CQ^`P12$=@!f1>#!$W2*j!%u2}4Qnk^!1&V3YyluL)Lk-)#jckqZ zy1E&;hLl#rWUmGY)eYlE1=tJ6d@(OhZyA2lkx5JpZHND0D0wgx_)gmhUMv23Lxb*> zQL!i5v!Z;1FIqN1(U{Hi;(CKcC(-7BtE@%lj3=;=Hs~z#WzbkLL6$o#{Q7V=k@e}N z!A`WrK$PS1q1A{h0-h!_g6DW-@#4NPO16xF%g;=Vn1vTyDW-czwxZ|?0V*X=~%}64xu1;piCq8HLNlq5t)xr<+4Y-IK&e2mZmYY3F^9U zMo9kGdh2tnvcc+q`X96s%-l>|vR)BNw;p>@b2cza%#mfRzX>u>?!L`dLONfu27|cO zPlqv~Y@IkZc)ex0q$o|@p^Qwp{t7XDb=1UbZ@a|5S_~*vvwhSJt#IT z=Sj$%?DzghKBRJD7S12VdK#0hN$=MWoBRH<_FR6~w>zEt-i|>oP-qW8PD3{+bK&}4 z4N@Y%jF%U3DL2A`T52Qy5OI7vN)4Z=JMutS{pH2_qd|xV%gBDN5yx(av&%RK;K~H( z;tLDGJ3Xq9&`!aD3#hG~Rz|$v#w^hW3zwLD-fTp?7VfiOcbqdcIyv{H`?_ls2v;Co z4u0J0Mxk^5L`>QN_f58d>`eiRh(K#}9%Nzl7%ItrTR_b&PPHoL4$@njWo6L4y!Ak~~hhyjt+z)}n-+ zITjx>Ar}-pz_<#ajs+x`u-YNQLg*)#$r?BX7#gsKA0C`pL(hAJ9fm}fn#*)al2b%P zdqbpFeHV3>wu-=&yisIA9@z&q(pJ!8j14zy}Cfuk&FRlIGZ31 z9Ku@g!k~U_#nX!~U2Ue(O6_*g`=HV~21+`eAoH>xN`pcH?`T2tNgxds`0~;58=D=! z%x9&-j(bvzBuO;!`oxz7OrT+Iz=I@XwzJD9`e3b|TlzA;V8DVhf*zEa9N!Kn!<`Pr z_Ww~~-Z!v&Cy)xD37X)u?yvxL+SZpdEFMRX3(uqXBmO}{{S-71MQ{y~w{=3gG`Jm! zlKGyAJLRt-wM~vlgRFSQp6~O>OHZNbL#_6?pxd!=2t8*3 z1jq%Wlxd_WFoTC4prrC`WV`|;T;nAlGq}Sl;J-B}phFQHgcqIAJPq3LF~G-&t{{^V z)KIX$tqK_QJ>{~%Z3;1jmYG$8{j=$OP`C{8a*Ygg1C$uomL7s6BuT&ssXsG37 z!j0f|@dUH_<(|$1tkV5^&MP5*&iZ-0Aq!`jwDG=#@$0wfA``rn1sOUL&=B%b#TI@rGv@seA5owr!QGGljC(s<^^g#Qzji-AnN2PA;b&?uW#0(Kvh%Et z%|c(K`)0Nl>W>AviFXlC)+*>pYX2Z6I*(!4l0GsYJ>L4&jwC79LjE8_z2=aiSK~U9 zhk}$_L3sZ#MX}|g+Bz(7qUN2KhzvN**?jYc57B^dqWWCT!l!)a0-bjOZJ#p?j=uXU z3H}=OrU@ieVE_zOaiOo?&OZ^w$A5Bm2KS|*eP-lQ(GO&|y5o*2n6WeM;fpPtWu3}~ z@6u`j%QhU^4kB^S03S4yEFy(ek-}xe-Ebluz(sGMxqwD(lgHr@6Q`;U9P}+x`4pEChm^uv2HXrSi!yKhzg%|3cRQ@VL&kD#!|35FLdF(9vtiE7^ zVP9#Vp(4EJbppn5ntaAmE`>RxE+`6ENxFrJKga0u4@bZA6 zj|;OTIo0_q{OOVjio}Z0@ri}|TVL94C-?`ef(}0}XEM^%44)?9xd0h!OTx>4*tV<* zKunZse2D`UOkoFkef}}oWqGFKo(a(l0R+*{EpdZwH!I4>B-@;!bi4=#m_WsU9RB4skkn zr1gZrP)lceey~IH|B~_h3!Dt~_u9ivk>ovdys>aK$_ZeDQM-=ifEtd5^(`nijO>%t zzL^qC^VLUr%VSK?x01mKCuEzBcF~}0tf(qZ2(w%;(p!;PbodzGt0ABVe zc?U}NT8*I^Iq97CIh%BrB zmxJbtN=h;=U4-SrFcRNY8HNvsJ{^Vyha^an?JO(bmMuho9S@D3!dp5>=+C10MZ%^ z)BX&9UQt7lYgi?Q_k3viFMs|W%0O~!D#0v(oaf6QYY%-;jToGhGOqv0xM@+z51 zkT>Z_mCP83_Pwn9g3k{+|0P@8YqCMe1OKTwKRUHsTp!X{-nu<>*^FzH3yL%%(nX5* zv$q4?4RxAIk1nAU|M9nLEscz_G&eAy)VFw^T6fuh*DD!Dt&2ej7W+U;U(cZ637@@E z&A(62HaeF5FPTHoHr-1PL#{!(@5xmWWyY|BH}q^!?sg18Z;4Zi2yv+ zp8SuoMtof+L0s@U?_Q?*c(_<_gC1G^~qq3DTE2B3`ku=9*cC&O$!ljX)h)c~gb z^p4Wf(leRWAk9vI`C}o`j${GW?Rgu~a6PwQHrnNl01~0zbbvw>s36}6x~=`6vp(Df z`7Z-vOD?cFMA$9+LMWd_9S1Q3emi>JR|XX;*24FPvnYKTFBzEE%>;?&cD^k=uTe4Z zGg@-GdTH$PiA6;#;MP6rqmhCR%lcL+G$R(03Q_|-79a{1jJJARcXEWrB7)JAk9Uc6 z56y5_O0}78xxM^vctPnh!5=)KDtX|&Q&G9^lk}K-tESg|r!v1?zI!1O8vUs&Ju0G- zXw=`0ooU|xDhOd=#Kj5bIC!==q3yXGxH-cYP4KJL4}C3*>U>t@Cn(7Jvo$l#-Q5XU z*lVrf4Jz&D>?7l@S0(W}9#z5lR~$vRdggLo!2cmu0ful02;e7W>xodg3U`Cuw+ zM70hlR0i@*{AcN^<%1~#^4>uqaY4Q1ZNI>p-|7O~wH|CP2F#ruEav}%*`eK4VD_s) zNcwm7!GtVUf}u_OB*2i!aYHb^)^B4mpB0i+U^hk*~P!aqBbX}4G)E!N0; ztP<4Vu7#;1lP}ab&cg_#A_)Al5R@Ja!3>Q!h#*}1qn>|8L-c|;k^`Puk{y7WDUMy} zVMejW0~MFlVu^UU-{<$994n8lV`U79ob0+lfCcM+U4j7f4K8ee$;x8Kl#R+<51h>7 zpt~BtGa*hX&Z%MzFa6%DSZ#G`ufrEIeu9kVOsn)%Eb#@FfjC<`_=))gJ9*SS4zDgJ zhIq3g*yrE`cNaAc+4bM#2#%j5=eJu?wdWp!9?xbIWMDfL7ON6+ZBxH%?eDw$@#W;i zTj08}Q#)ZjkA%m$$3B*|+mzSq0nsl~;i&B<2n33_jN69Tk!{((3Gz^NfP z7nc@VfgASe$@w#v$Olgp{L!*KxlcU7P4AHRX3bR(`+xb-cq`T5OAx@2Otz(HRdCj} z_2E0SLummH)vq~Pf^W98@(ubwk?ZwI{m43{#oRUAS$mvZn1h& z2*!$xaBS3KE)`nI);JkDXd7mfz@sidE}Pwn6Kob}z#`eP{-oefKVW171`e??_Z}RG<)Qrl_J7J96yd1jL%4 zIw=&_sw&E)azjLA78p!8?ROhDZc0>f!kpqP$y*BsTa;*&P|=D78DaUc`Vm~+L`xQq z)w)9rg^!O*gCk${!ssrt+k7^0CMayper%&UFAS)%>hY)C-p|#%#SMDiykxy57mbG- znOvWFZ|!oufhKzMsA^&%`X^=PwW~mPtB1z}10I5N>Ja_$*1ybqM2UX?^NT~&4cc3~ zBANy1En7*N?72Vy;`G0+Kw$Njn~Q?iQ=uMfdlk+|j3LF)5l$632>bNzBqC%Y)n|b= zEu00bh@TlBiK6HYEM@~4@7d?~=@bK!5o*((@pIIBW2t1(@zaG+i;)yzJD5N|opq!X z0VTs(qeapKNiSJaX8lj44;z<5w8JCH>suAv-q+g!0Bq9Vx)o_)h%dPDU-aP%JN@t| zb6uU3uJgr^$Gfk|HBp3ZK}*aIx}6g!N(nQ^Qpg7@6c56ld7nWM(oawmb3zqG$6U>= z^OTt5DpfSdpd}?WEgw7`ON=sgR=$}_WFJ|fG*+5q$$*G57L*ZF7G^A<2}Qe=2I9$Z zM9S#AMm>J7K6D>_ud^}2&CzBXYLF_{5#$X?S0K>fm3f(Hzu&H&{PJ*g>lfR6!M)jl$ z_#D-Vyxg<(o0~ch2QQ#^!kC2Fh;|9U52}11ghqV3ZtvOzD+Wp$xK#dIZh;15%E;x% zN}0N50c&bNs^1O&_YE5qraDgfsc^`7kT&*&ZqzAZTd-4{y!+E?uPAUwn88Ne|GWN| zd}!B^qT2=@eVLW>>7E=Zg;=biU*i4N>7l3#oGBK3Y&>pk!Tc{H{c!Ba298G`R!l>E z$O2-&J;-Fa)0OJD-4qU=gY?_ZmALb{E31*P=U6Af2lB7E8_|MpadxGoLgy7)hKPoS?`a-$$XFcG|f2 zae(y0G!F$qi2v26mMu5jEnE9<+X|05gV}EY*o$1yi!q4bbK@O-St*ae=fSVtGIhIa zO#a(5xC4dM^;G;R8Cb^p>Wo?Qt7&hu9okUxarz|Lp~+n8ZHI`O6=S?Lk2tyn-E7jBKTffRl3(M|ayyvCi=AHa{rnL5-Ez(d1%3 zJd<^Fi6Qd)=dIKHkRJ#plYigy`<}C6kP5~B$2Gr17{YoH4+xp}B+5R(SL$e#>yD&% zXp4jn8eCGY2Ggw{5$dTS=->N3X6aMV z%lGe*rzAJkgDoBkoNt%QRhJnQ-UV8L8I*GeU+YrSljLdd)Aj(t*okaaWm2iI8o+Hi z;QixJ_=-%`*-7-Wr+1wjJ7L^|7TbUbpVPS;#jNoC~cnh`-IyNVR6n)R~Il+o`xKFO1#`TB^vWt zXa^MZMAG`FuXZmxJFoxOX4!vuHE83H*S?_``AbuF7H)m5+mOQguo=Tpw=K~(>gb#+ zD(ON!#Ft-1PA(AuJ3DJNil>X++00h7uQPc@YH{dN>m+!Z4B&VB2xcL_1#`aJ9|6EG zV*DVar=W45=V-S5kEp;Vc&z5p0Y?^PoZ%fjx*IseO`4bCbz9kKacj-je&cnXx58l_ z_F7@=-vaI*Ui4B1lT+I`1>&uZ1L6EI;x?1D6GpsjJ~^2wRbHkJSHp_aswJc(A0|EC zLf%s`K3#>1E!OtFG!Xgy&KG<5N&*5}9ah6E74S{}S$0=-^1C`L-`r`^R06aYw?Ee5 zwi@oQZ;H04UbUmOf149MKt}tqR5Uuz!48cBPjwTXhUaz{O`z*)nDg%%g}IW+UO` zn`s=;Tm^Si^m#cFE>hXXe)W%JK{d?5rTwI3jhbDh`~{JOW+b)pIY)QWl%6Ap^>H=O z9qVSLt3`U6R6lkE-{fo_T&>^un;}xj$u(v04pn`=`Gzyk+f>Yxytlv{W55aBbs}D* zq{+T=nIvyh+;$VO{xi-m;rEA=GR6Y%U9QaX6)k4C6hYrL=j(ilcx#Q{kUQct9Ryx~ z2`CuG($Tf;yOyC^8$8NZeP>@j-yqx95B^CAOC~Dc1W3`iO(qjTO;&x})3&ZN4rU;WpF_$#Nc=m*;RH`GuDnt=^u ztDib>YvcN+2YxqSb)x(}{%*%S&@x^4{Y|IC`$H!Is`G0tUj5iCb{+8iN^(>Ey-@T% zw7lK33taQJl0Rh?xp)gCk=N(}BBT-dQ(Y~XSWyu`Sr1#CKX9P9)#f)JA8qO=Q8l zN=2_T8{;=kR%eA(nVWFExAYDRb){dms-mGcM3rgxn$hjjBv^StTgP1Cnb z5EmFDn_A?ZEthWE{HPkJ%(LF%@kRyPg`{EnYoWjR;c0@@a$Ln&`eYoLV7y3_mFOz# z;k$KC?Mi^%e?9-US9=K~y*ALDt1Rge>m!wW&4rFTEJ?mDI!omm8`TbMVSU!<>Nw%Q zCKm`t%oi}h@03-GqTAR4%;Grb?Ut!PmB?}xD(BohasH@--Ap!DW2(VRKgJCIL4Z%p zl-0tqYC#JZfD`_*UGQXnh?i@AK1Ovv#T)XbzKPo(d`?5xKkS`%YvyKWY_9hEz99WB z9r0MaRQ;U&X&`ix9F~me)J`ZNlXD!_=t$5W>m)1r6u*<-^5{fy+pRYSq11qV_L9cR zb+<$ZT7k(>ujhANsSojKs@KA~?|#R~V=oM@d?#4TBbi;#b?U~}t~S8m8Jnvz%1s?a zyFL^-EK_`ap}rFP<}Yn!Vy;L+fhbD4>JZ|=D@yJeLEOg#2N9aKxeDU%lSb2+M(k^vmu?rKd=hMpw*BUjQV(Yx4eI zXN|8oVZA05jF$-#{R*nCehjqa{eJ-gF8|C471 zOvKmTh0|z_AB5clfRRiFB-Ft#ET50}-@XN#uUv^+Z@jubW~^6Nm!BDV8W*Q#aNx)| zUfq8Zdyk#N7hgE0gMRwMPyo6NCk6NvVg{81e?9_$7;H!+(n0NxG>9t30yp8pS$L-o zMJ|ugax5w`A*m1$)TRg3hW-$Qw=J8GkG=O+Y~8d5Td%sZ-m&%S2`OCmv4^5_enSxi zS+bO9@ny0TRkYoHjv8H#nikq^s>04aew{Jv(&6yjbpB!}B6z2dm~jtLt4#JeELgPL z_B26w`0iN`-~Gx{{^$Un9dq(Rgn53>P2<{$L=8 zZuvz-l?HwR0tnx2LOZIc+e~l)g1{j&Cy;=M$Of|x6^kMg*+JI}+Z~5(jL^cz|85uX zjhDdub$s}$W%$6`Z^D)htHa#(dey7b_54e(i#Qdc{c9!G8EwC0ziHNrN^3c$4SgojwX{43TmCLULYOC^mF9mLqoHmnZ89J>uB$&;HSyuyM^YT(y36 zeX>xmw$`x|r}2@0`Bgk|dKT0i_M3f%*?#2fUKMZoMFTcjt1tmXZ#8NXK~fz!r|kH@ z#FG>7P9F;=rAQ($QXB~&dnkfP&t%!8!fSzBvp{QBCm_uNtr=i;8az9NfAQw^xPJ2* z-1+7kuyXn3b>2a}QrDSt=keIiALF0>FQf&lC}d5Or6 zgEE*&#*D;ydqE=6y#aUJyd5`PdllAQc}0zaOBwiI`99ESf*M0Q>ObUzU+EKo zMng3IoEzZR1n?9a0lf^^+bxFtpdUm&fLxy0b56z;C(pw>cT$`Thyn^lJ`pI=&7rKy zsvzdV6cG>mbqQ$AY66({!9P2riWMmY8~77=>{~YQbxChy$ojfrjsI2y5Bw0#W1syYClBFtCpegeRnbvkd`Jk)G27PY zF`haPZ(fk&Uzz;A*AiQi}fY6#S5Xn(&E z%L1HB;P(mO4}V~ypHt00VvQO!$jzacNfUR)pu(W#*z|eu#JE}66%<$mAa|x;24oPm zC;!_I--P>a+iLv9-9O)l-LJlZU9TO$ryhS!3~hv{Ww0Adurbqs!FcG`ehC}bt;Wqa zTw4bc2O9X_i!6R9@BObSu=c7EYxhk$`ahSzuLl)gF=~zKI(uq+1KnCbN>xj;)CzK3tKj=yCeo+3_kFm!UK;#^9{w2Kn#vwfO(i?c>#RCcLsUmg2b~>}?;h|ssMO=IJ z25j51u~r9_0{##2z{B4Wz#oo)-_Q*`loj14`BFrwB_HrYb)OVmK(5T)0G1=;9^bz|Lg=F`_>Qez(d~#nnOlZKaB1x z5!_Q&`s z!Nzr0)F%tQ0RDg3p)LNf0DV*U?~}k6e!ilxxd*v=6BYr~pk)G-tVIgE7)a)*6 z4M+7neEiNWxZ|cRxaqnrb+5!yf&YCx@a1orK7LbJd>!34fFFF;t|bwrck_v<-nl^n z2YnHDVGP8U|<#JUO8OMNx239R1ySQ*X}b_Z>WHraFf{qk`*AN-}`Q;D#<<(s6@F zc8}xHT_=G5?-?+A`0Tr`$1T@w!u8uW)s0hA*3{HAo_zWzc=x~lOCR{MFMk-^8;WxG z1FNr;9^hdCKh2`siERd`(}^H30CS@pI5+-9l-~w+P~J<(QFfp&UULK(fhK`q`4xZU zdH93d*J9ljm-l4T{qa}7E#@tfh!|7K$w5#nq2H-uYs6L53F%Yc+6{bj7nnWVzilP% zx%FynymBROzW(YukSKuv`G>!b9fv1?#)vQN8}ck)OMMyOQ^Lm=pr??y9h)%;w8nsd zxj_Wwy8tXwbvQyhSr?JR0wOnVf}#K#8u4*5IT1DvA@;it|KoSu*prL&@++_5i9=_A zp%L*$-ShE`&7hl|ut=Ts-L>X8BadUpp$Q-8Ln9jGeo!wA?im)pVX8DlZSKvXnPd`y%xDdpe^`<}kqFY=f-1%c zN>%`D#sWyB1CzzDso<9&f?t(2Iv+fFUbheP@SzQ3J+b}(@TEr|i)AWCJYW|sk+GTB zakK5WO=5<a8u;9vG4) zpFbi%-V`JtK(FMaUM1#R$fH|1uTUOMLyR^i!v&Bez%uczfEuV`jG)<-XJyMWQosQW z=^8teiL7XA*mkTr3>xvk7tVoOE&TKM-P)52bnN&^JpAGT-yI39N<1={TFMb5}o&wmzXWwxxZn<^?ZoO&ioM@bCTKseV z`0eHhST(?^A*{WXuWy4N=2*KZ`;^Tz6awPescuEUE+D7I2hv@GDv&_=1Rzy_A*XcD zPf}KIK}w7lMD0}Jw;k73;Dc-D;ihftdUAoj_1z!)J>eXIq(A`}svtHl8&=2coo?33c%mMy({M9WAD2S>((sC#&xR)iV#eTe-@yIKFe?T zlXq0ZzYl@+rzX%)7U%<&rp%~5apaDYxhEqvV8^m-B0zK^l{-F=t_rF^0?pEaZ-dwj z4n&^~+2x{F@hwlBrz?ej{y)E|Cl}}WpY6f}fA&rPL_#(F4H(pfD|6GixIgCektl5@ zSM0#NT+wFbD7L~3R$k}|vB*T+IX;V>|M|P&vE#>YTaUNjz71P8Tv6HBfe-xWeBd8C zt9|<6P;Id$U1~_HFDLWpynXHO`)#@sC8;1@;hM6P{|+@k!c9m3dI;u3lHf{`K(o6~ zPw{{YqO*Sjn-V$cTp*Yi&}!k%u?Dtn>i%Zlci=F7_lti8Y7SZBpXDrgWr5ov`>bLn zN}X9pRvb~*T*!24*+H3&RAf199rxXKb=NlK-u;L0>0u5mc@rk`6M^n>g-?x@O)-iAM$@%ua!)FKX9;@ws>1 zfLpe2#P!!~!iwcfdk*}6_g}t-9f!{7ynLCR7Xkb`pZLePH2@ME5_F&iL-?exM zcm9J--2weicj19Q`yZjN=_i;pjWN*4;CEC^RlS;WRFxhV$n*1o z4g#jhpCorcmke{1+z+E289M?mI^gvycWg+l_b;*;Uw-8^{I{=t2Y>Y4UD|hS`01po z5y{X-!v{Y#V%Et_0J7p40icyTI2gAOj^dNx#2^^7A_IsqH^CuagH5c2tI!zs70t|~ zh#j=>@GGbA(5~+T-uD2ng^ygf3Lkv;ZKbG#2>6dhz;6xQfSRLz3n&uDNUGr%{3HQC>``DzK^8aL&JN6yof$-7 zPO_DWC01kAq-&`EO}g7HW+ubR#c-~I*9r;Y;ay(?c`e+#Vm|JF*R8nr>h-v3`_;vP z|IlODaqz4Oe5H)*@LO-)f{%Up-HCz9T|YmlPl4D`I+nUotr&nK<|I^raZNe-fTpM$ zU*%-rW=G)ffC$22<0Ke>6D~LyfAFT&h3fqSEC13fuNk0+Y68RlnLd$@?5n_!w5P#3 zMn&6gpfJvP!ckWCo&KK_^mimepkBT(-5DN4V*EaK_h@PuoqDP;;4j~bKOeSpC>(fb{tz!Y~3& zuAo%HMk4FE*%eT<++XOV8lIWdF#`|arcOB0ia<5AGHB|7E3^2-H+}{@{!_sFD(+o9 zhTr(*w_)AdRako2BJ6o>AO77#kNel1lyRJASbg?`kpIU&dw*uU;n?wU>^yWDXpV?W zl?5m%&*kx6hM!K9#t!X)x8f%O%|iZtDe^zvb4!v>|M8`h_~_wrtXsX*3HrbL&X4fP zzj?}x6c3Gtz1~1k))=X#FY#5BCk{Jm?2zN+u=ueiskVftgyTNzGs_@VY=7s7Fgu9_ zQ5B{A(ukshnVIRZ`Dqk$(FD+%_0@sb0Fwf|M(8T+Ja!Q~|If#DhL`vw&0#^R(&{rl z_lwu#1Mj^ncV5EJ_a3k=MpCpshXFI(0E&?Vm7^^NYBk{symb`pE9FQ5VM(oM4fgAQ z{B8X9JJ(^$#x>aU^L_Zs$G(F{e)0yw`g|S4BdaKcsA<%KlhT{nc|0U7C7E&?oB?D` zj`ADXf2I}SScIA!L|_*m@SC9hU< z(I#Ru{R&3?I|jPz63Glfebbe~_s-4WyI*+`twUe+hkXD(=rsY5aYn3(KwEmI2>dZi zFI#*WI8Q#_v!yjfUTQo>VC0ZQyNVeJ5}%S|2T9}-+g~C@+4x@cI~<^-G30l`^``w^ z4W5oIw4jHy=)tSxm(lv!+>uphwxj1TTEczj_y1SiaqITBcE}S?zhoS}+Si`i#i6wi z)32RN$NO0R>}TqCp(?6DNT@1N=@mz;8&?6<=T|tOKfP5kf)7^`ybx53BU8dy$ins z;Mj>%c=6@e@vW!+-fxsD-;=&}AGvlVe*2%k7h5-XR^al=hxPrGZ2Hp*tc-Je zhFQK%Mf`_cK+hxX=T0$D8|27hwx8t{$2|n4{2l`e04vbQLNr!ijn?tKU|*|7Za}zM z8lmN9V{>RruiVnvmg>2H58E$gIHGw8zfT#@odJHd4}Obnb@}a(e?+Kz61?+{DF0%` zl{y_-8n9WE_jf=Ha%RuE9;)x0JF+_Pn;=YT4}w)>2wb z#KL}X`qY#CoiB-Cju!)E1w*3Fx#nmwYhTJLD^gK=F|`1VRhu;laFh=&Qg$g!+chJ} zW+F{O$tIEI+ol2E^s$*K2N<)geu!0S@ITJ0)i}oV1A~d zQ8ZR;@~ifYqdjF5gpj>)NDdhx6PP5xFS7q)>A%(~0vWLc*Kw8TB^b-#>jeCi4Su3b z=}KfuU?PS0zj*^jhKKsHIY05W=giVyD=&j`A(P#a{t|=McIO~>{H&Vs0M#e_BYyf2 z2fu72Y6iA^5V8J1a|CMHI=>-g=n7Ccay$U0Q6Ux;dpqR6Wu?h+BxeCX{`&0WDoVEc z9f03`HeMY3EbmJ&bqT<2H}q#R@|m*}@u@w|(~h(-6KjFV;fJ{oIU~rOlPn5V0$%C_ z5XRP|MV7}fCiugD2X2C}0^!yt0yRgVmag@iMuvUJ!ns7zsBvclPZ42eiZ}YOfouRD z?$ZH%G)RPau0c!@*uYmQN}~kuXNpwcHT#u~i*eJo^?lixFYW%hqXxrPfC)rtgT135 zb^E+f!Y|D|0$|(fll1;w;OF@7Cfpoq4xw?`>Zr6-0*xI({cs~OoaMTSHRZ5!{w28W zjjEz1AeliqN{uhL!H?qLj~%1Qp%|KIJrDQXu(od-^M#jR3p+58Qf3>r+;W^@UtAz9lN zsw1D=cY!cb@~2t&g0i0|VH1jL?s*`1xbx<#`nECm9y%Ed=*sJz4`|e7Qed$s+E)Sn zB!S)%K&&^qXqq2ZzQw^0cHBTtxtEP0s6{KFGg%O(=(_Uw6YrcIaFS?C3F1)-I4Q-~ z&&uwzNW>UW3K#jHI6y@6mCw9oUC-LC+iPlS8ee$w6@84`aJB$*zJ8I|lt>U+8Gp># z;H6H~eYIQx)erEyPQv8(SqGq;;E#cx-5-r6)S}Cy4aAgTS;+#p@Z-}ILfEax-3~07 zXi^BsRiEIH{iN(U1ynpxW!#^rh1e}ySNCmGKKbxk@Bpfn=cu{ar$*5y2PQcE9opd=8thH03 zrw99t8im63=;rUmy+eJkx-OjMlN|8 zODjgfU>`~f_@!)gA^*SljxAU`HoxbaamROmgwH?vchO)^IgcUMkR=_&^8f4vaR*93 zrjX~wKt=lkGCwl0 z;5VB7@Kpo+&Di9hMC(r!`zI$3eC;_O=wZ9IAu;A#2LYi9o@^A*@VT#B%87!j-B=sezF%X+o26V#kK?Fw zwpEiO!rT^$;brt@qD;4d?1?RGDS`Qm;axmq<{`zbg>n=LIR-$gpqx1x^(ny_y9`9x zY5{2tKFaa=Wleurkj0E^H?8d2W{U=Yegiv>Oo%>>7Vt?$;8zLOKeg4GaK%KthPg1+ROjQhUE(u095hTY360Ls@7l9JTHUUr#sCkRwO`g-Ov28U% zF#5+6nJwZ0(QVgN>uk)9?*%y`?9;jX3r?mKW8zy7H| z#f~ErzQhj(uQZ1Iw(Q}AAQAM-1O9|dK$+JHG2h;KZzzX?$kTY#s zAZpv+&tdJ1xeG0P?48$@zQK+iKZ%F_>g#@GU!w_Xj%wihA7lgHHTN$K{JDKsT3?$7FJB zb4rjpIkMBH3J@efqhsL7i6{UW-c6g~$(-7oB3@E&cB21pHWsCh{QdMzW}f{coHV?3 zLwWLlYHAu!KK&DX{^10u^yWM}aw7iE%0kbOv5oL0hJ4 zz|2{LK`h{hUjwdk-DCohlHUyEo1;M;(R~sDIT;*`9ounxDj&DfEf&b)FKf&i8 zejGavpVPn}6-7KvF?7`)vTC+w4^KJD1V5FFJhs4Yx(x{ypV_Km=#Gr%OhcUK6u|K3 zExB(OjC4j}?yNY@ilAD4LqQdgj|6lZvEg~q%)CTt&ryTYSo2UgtVN!9K)c{CcKk=O zEjlwk{g!nFf&Uyn|M1r>;5SUEFD?Xi>mIm{lPgC6+(Y0SvXd-Y z&CA0aFS4=E@pF(sl0PNg4H_QR{qa5FucV8_%vayhMk@~ffbe4PnWApXPrZByzj)`h zi7CKQaPNQ*bP?4LN3exMSX6wJm+a%1*uEScfIkJunRx?kq*EJ-KM4sz1JDrECjifL z2l&dG!=5W9fMTiH^7mp+H|LHII#o#LLh|h+6`lGL8|y z_~J3F|LY&%1Mj&d9OD%R_x_(9esGUel*FU0J}K$rX8}KZv|9V%r_R7n1&O#EF;tkI>E@96`xSgrc~y{l2Ntb?FTJ90qmu z81U9C(3*jF_BeiJ(*j(+cpkp+y!7ka=%-I0f&MRF#^i}e%wmHY!*PxVQ_0EatG|VMV9EG9*|;g%P(7?Yj86| zEn1F8Uq1n!JO(sJ#CY(A7`tX!d!?K$)6Iq%RHE!haR8%(-_2~)lJ^9lsxAQc(du`~ z03`h`h|Iz$n3tMm=m3tX1dLhX+8vlSiA7NY(IlleQ+iyqQ^%?Zi3gTiu^$g6f?Bi! zUSkM6bzaP2umP_Ud-lumb?_q`^7uDi6!?m(gkPyz`A-)jzmTeDVqV*(+CRw07~I>`E?4o(gLcV2{A zumnuxlR&DEJI7>yrr+0jPUVnJV3=J>MDenSRt5vi@k=-->U( z{Hl>l2fyn%><<8-`Imu47UaL^rDgaH3i$2&lQz4qCV=vM|BeWT+6IXYN@@&zuf_u04S%_CM&~> z8qN5?&?02hVX1E~0*f?%F=%A|;2ia}l_6Nbr3vFd_KXF|0$f=_P;(Oeof`Qfon-9& z)EJ7NiN`DqVIUL7gLg46Py%II{v3eoRQBh|^2=lSVRln82di?dnND68?$RKDejI;M z@dr?$T5&QSPpX;j10;>CN$ILwHNv2Ii$KHkP+qjZMDQbr&mUaxuqB6+<#eVYDe!KovbDKLwC`N*;W=kC8_Vg58hw*6#&PFEB4LuQ?Xwv z1SC1TFUS*64dfd$MkQbJ-bqcGH)bkz&jE%cv<~_w(43X4#Gp zpwD$TY)pX$d)-z5Js5+;oZ)T+1mqRS&`Pn&l=HDcZ~sOE?6so58+H|UO+acdAYoTC z_BzXuM#ucOH$B;7@LSKruDxegskbuLZMs)Vz%H9NV-(#Z0K1nS z^$7IN$FX^12|12vgMp<9(}vSFv0!;30yP?7&l7n_>>z>8T!Hj1N4+8e^4q9&8~ib# zy8!I!CY`4y#FfNjZlR?5es)@1A^STb0dDgl_6Y?D6{Zu)gJk!D?nSy)K=rNfiWta<+fXnzf+xYvRo23Ik@Apfw`U!+!%Qe}wGbv5j zb)Cuf=Q5-@C5Z&mO@tNL^Q`XX?AQplm2z)v@T!Oxmz{o=F4osEY$)^ASn96fIjYg{Mb`7%3xQhggI8~m# zpC`+Z(_={%2RFL{{%!^Nin2M&PC+DweC8m5Ji$0JH*c(0X!vKy2uuYeVECmnF2J^Q z_E)pA!0#0NN#TGP2}rA( z4*n=0$T8L@mtPpR-n0FEKQM?^OJm%&5cZ!|UE2WNCIJS3+3EHIe%xLom+nT_MPQE! zv7m7+zhsz z4*m2pJyj}#;4M()T?87L51s}PbWqBbIA`AUC5akfcrgHzejF!Q|G2@V0zAOzWdl1Jo)5-Fpf!^Y zejYdmFx6TR+#LWyYhE(o2g1od0SF_*DXg-B;b)V|8uNv)FF@2YP{rK>*=H~C^@X({ z{d?i*KzJR3pW8&hV*61-%pivn;yf~$OC*7Lz7mimKq=Fd27&{Gf~0D90j?eabX)Q} zQaYI#P!vsjw^K=#L)zzfeq#zSC0Sy93J{V&G-ICF@6PLw?y`-u`PhIAoJNKzKY(++ zKPr_N3=(iw^$j8kSgzWDsDS321wXqaCizovw9F@#0X~ZF!#3kf{=K&YLlT^t1j1;t zPy!4PHQ>RsR5~Y+LE39d>N`;2!lkB6Q`>|5vby*LGu%qPS46ByzyhR^qACVQ5*wX`6&hgnbPfSU6y* zWhDXyY9N?xs5deT7lVxB#PGZzrI1GcGoiM?!Z6#ZwJwWCo%Oq;p%HyVIEz?DB-+gd zr~v2&Ljd%F0J;T!PB3*6{M5y?)7-v+BqLad4^kBbrvs!<2ZH#L3+QQ8a`Ea%O0(4L zejHPhx}ao5k#j^E4UPDD58kY!0S^y0A}dY=%{c*nxB2ZO_+58CIwzL4KR`bru<~&t zASj(g6bGjnaJ2n*hO=RY)w94E199EARNp+0rB41EG&BO91<>;R*X>!=ckQZx0XdGF z`vlO_fS-U#U%+p{!k$V*Fr(`tdQ9TTP!18YyZ$&MbjHbp1N@Xi4)I`uL8fMgVv^FJ zgjfURQv%IlFtq@$rGvFCs|y#mzxR3`3#bX8Kj4=j>ofT6(m*0*0+12!3?wQ5Nx$yk z#Gmw=l4>9vSLRF?&WO*Yx(ejDXB`&i7#WN1$5Jq+TsKr@&jaL%NTI)<)a;=Ld!ZW{ z%>zjQy#_zIJlKBS1xoR{1CnCLS-Y93NQhhl*Y=GE?;rwdNj2mt?b@8~0f&7KV@kws z|CV-?m_^1RN%$l{igX974oSeS!|2LTN}!4@+^Z7<=oRQFhhN+CmqTvZ4vLSMaz+T@ zszP>ipy6&LH9urWu+ID$r{W|@?%PU%(#ar+1XM%!a-}G*B51B!*qHQy1d>v+aVaMP z^<4T}MusYM1DyD`laPXLtu6xNcrAdljR7YQMNMrM6R8C@PT<%f3JC&RLqI#G3X`jMVH7tokLM{_9oPh^$%$h}e=IOnft-9I-yI;r1rMMGfj!cM zhbczWBS-90=~9tMc1w^5&-h2 zPA2?L$RpmskU(?Jqv{MPHN53?vbZ3;F?g9>6WXR{)DlKT^8Aq4ND>J%Gec z#f`NQk8!{NHR1^40-6Lp`8L{d2imbVw&kILB7y%OOYAA5+)c!`00000NkvXXu0mjf D{{|lD literal 0 HcmV?d00001 diff --git a/index.html b/index.html index d2df302b..21dc242b 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ Blockbench - + @@ -15,6 +15,7 @@ + @@ -23,10 +24,11 @@ @@ -93,6 +95,7 @@ + @@ -128,7 +131,7 @@
-
+
clear
@@ -158,10 +161,10 @@ expand_more {{ plugin.title }}
-
+
- +
{{ plugin.isInstallable() }}
@@ -174,8 +177,8 @@
dialog.plugins.none_available
-
- +
clear
@@ -238,7 +241,7 @@
- +
clear
@@ -295,46 +298,6 @@
clear
- -
data.texture
- -
- -
- - - -
generic.delete
delete
-
- -

path

- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
- -
-
clear
-
-
dialog.scale.title
@@ -511,6 +474,15 @@ + + +