From 359c0e3d051b0db06b1afaf66a69c29d55886f86 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 29 Sep 2026 03:13:52 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9B=84=20Sync=202026-09-29=2003:13:52?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luci-app-open-box/Makefile | 125 + luci-app-open-box/README.md | 1 + luci-app-open-box/po/zh-cn | 1 + luci-app-open-box/po/zh_Hans/openbox.po | 65 + luci-app-open-box/root/etc/config/openbox | 6 + luci-app-open-box/root/etc/init.d/openbox | 96 + .../root/etc/init.d/openbox-panel | 98 + .../root/etc/uci-defaults/99-luci-app-openbox | 26 + luci-app-open-box/root/usr/bin/open-box | 208 + .../share/luci/menu.d/luci-app-openbox.json | 12 + .../root/usr/share/openbox/install.sh | 136 + .../root/usr/share/openbox/uninstall.sh | 85 + .../root/usr/share/openbox/update.sh | 204 + .../share/rpcd/acl.d/luci-app-openbox.json | 34 + .../resources/view/openbox/main.js | 456 ++ luci-theme-edge/.gitignore | 1 - luci-theme-edge/Makefile | 16 - luci-theme-edge/README.md | 36 - .../htdocs/luci-static/edge/background/1.jpg | Bin 27946 -> 0 bytes .../htdocs/luci-static/edge/background/2.jpg | Bin 21993 -> 0 bytes .../htdocs/luci-static/edge/background/3.jpg | Bin 100094 -> 0 bytes .../htdocs/luci-static/edge/cascade.css | 4147 ----------------- .../htdocs/luci-static/edge/custom.css | 46 - .../htdocs/luci-static/edge/favicon.ico | Bin 15406 -> 0 bytes .../htdocs/luci-static/edge/fonts/argon.woff | Bin 8808 -> 0 bytes .../htdocs/luci-static/edge/glare.svg | 29 - .../htdocs/luci-static/edge/icons/arrow.svg | 1 - .../htdocs/luci-static/edge/icons/spinner.svg | 1 - .../htdocs/luci-static/edge/js/jquery.min.js | 2 - .../htdocs/luci-static/edge/js/script.js | 217 - .../htdocs/luci-static/edge/landscape.css | 76 - .../htdocs/luci-static/edge/logo.png | Bin 14025 -> 0 bytes .../htdocs/luci-static/edge/sun.svg | 14 - .../htdocs/luci-static/edge/waves.css | 135 - .../htdocs/luci-static/resources/menu-edge.js | 158 - luci-theme-edge/luasrc/view/header_login.htm | 38 - .../luasrc/view/themes/edge/footer.htm | 36 - .../luasrc/view/themes/edge/header.htm | 139 - .../luasrc/view/themes/edge/header_login.htm | 120 - .../luasrc/view/themes/edge/sysauth.htm | 115 - .../root/etc/uci-defaults/30_luci-theme-edge | 7 - 41 files changed, 1553 insertions(+), 5334 deletions(-) create mode 100644 luci-app-open-box/Makefile create mode 100644 luci-app-open-box/README.md create mode 120000 luci-app-open-box/po/zh-cn create mode 100644 luci-app-open-box/po/zh_Hans/openbox.po create mode 100644 luci-app-open-box/root/etc/config/openbox create mode 100755 luci-app-open-box/root/etc/init.d/openbox create mode 100755 luci-app-open-box/root/etc/init.d/openbox-panel create mode 100644 luci-app-open-box/root/etc/uci-defaults/99-luci-app-openbox create mode 100755 luci-app-open-box/root/usr/bin/open-box create mode 100644 luci-app-open-box/root/usr/share/luci/menu.d/luci-app-openbox.json create mode 100755 luci-app-open-box/root/usr/share/openbox/install.sh create mode 100755 luci-app-open-box/root/usr/share/openbox/uninstall.sh create mode 100755 luci-app-open-box/root/usr/share/openbox/update.sh create mode 100644 luci-app-open-box/root/usr/share/rpcd/acl.d/luci-app-openbox.json create mode 100644 luci-app-open-box/root/www/luci-static/resources/view/openbox/main.js delete mode 100644 luci-theme-edge/.gitignore delete mode 100644 luci-theme-edge/Makefile delete mode 100644 luci-theme-edge/README.md delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/background/1.jpg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/background/2.jpg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/background/3.jpg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/cascade.css delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/custom.css delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/favicon.ico delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/fonts/argon.woff delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/glare.svg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/js/script.js delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/landscape.css delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/logo.png delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/sun.svg delete mode 100644 luci-theme-edge/htdocs/luci-static/edge/waves.css delete mode 100644 luci-theme-edge/htdocs/luci-static/resources/menu-edge.js delete mode 100644 luci-theme-edge/luasrc/view/header_login.htm delete mode 100644 luci-theme-edge/luasrc/view/themes/edge/footer.htm delete mode 100644 luci-theme-edge/luasrc/view/themes/edge/header.htm delete mode 100644 luci-theme-edge/luasrc/view/themes/edge/header_login.htm delete mode 100644 luci-theme-edge/luasrc/view/themes/edge/sysauth.htm delete mode 100644 luci-theme-edge/root/etc/uci-defaults/30_luci-theme-edge diff --git a/luci-app-open-box/Makefile b/luci-app-open-box/Makefile new file mode 100644 index 000000000..4a9696dd2 --- /dev/null +++ b/luci-app-open-box/Makefile @@ -0,0 +1,125 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-open-box +PKG_VERSION:=0.1.263 +PKG_RELEASE:=1 + +PKG_MAINTAINER:=liandu2024 +PKG_LICENSE:=GPL-3.0-or-later + +# 1. 自动判断目标编译架构,映射至 Open-Box Release 预编译资产名 +ifeq ($(ARCH),x86_64) + OPENBOX_ARCH:=x64 +endif +ifeq ($(ARCH),aarch64) + OPENBOX_ARCH:=arm64 +endif + +PKG_SOURCE:=open-box-linux-$(OPENBOX_ARCH).tar.gz +PKG_SOURCE_URL:=https://github.com/liandu2024/Open-Box/releases/download/v$(PKG_VERSION)/ +PKG_HASH:=skip + +include $(INCLUDE_DIR)/package.mk + +define Package/luci-app-open-box + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=3. Applications + TITLE:=LuCI support for Open-Box Transparent Proxy (Full Core Included) + # 架构约束:仅在目标平台为 x86_64 或 aarch64 时在 menuconfig 中展示,防止误选到不支持的 MIPS/ARMv7 平台 + DEPENDS:=@(x86_64||aarch64) +kmod-tun +kmod-nft-queue +kmod-nft-nat +kmod-veth +ip-full +ca-bundle +luci-base +endef + +define Package/luci-app-open-box/description + Open-Box all-in-one transparent proxy management suite for OpenWrt. + Pre-packaged with full sing-box core, embedded Node.js runtime, GeoSite/GeoIP databases and web dashboard. +endef + +define Package/luci-app-open-box/conffiles +/etc/config/openbox +/opt/open-box/data/ +endef + +# 2. 构建准备:解压下载的对应架构核心资产包至构建目录 +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR)/_core + tar -xzf $(DL_DIR)/$(PKG_SOURCE) -C $(PKG_BUILD_DIR)/_core +endef + +define Build/Configure +endef + +define Build/Compile +endef + +# 3. 安装与打包:同时铺装 LuCI 页面、系统脚本以及 /opt/open-box 核心 +define Package/luci-app-open-box/install + # 安装 LuCI 菜单与权限声明 + $(INSTALL_DIR) $(1)/usr/share/luci/menu.d + $(INSTALL_DATA) ./root/usr/share/luci/menu.d/luci-app-openbox.json $(1)/usr/share/luci/menu.d/ + + $(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d + $(INSTALL_DATA) ./root/usr/share/rpcd/acl.d/luci-app-openbox.json $(1)/usr/share/rpcd/acl.d/ + + $(INSTALL_DIR) $(1)/www/luci-static/resources/view/openbox + $(INSTALL_DATA) ./root/www/luci-static/resources/view/openbox/main.js $(1)/www/luci-static/resources/view/openbox/ + + # 安装系统服务与默认配置 + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./root/etc/init.d/openbox $(1)/etc/init.d/openbox + $(INSTALL_BIN) ./root/etc/init.d/openbox-panel $(1)/etc/init.d/openbox-panel + + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./root/etc/config/openbox $(1)/etc/config/openbox + + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./root/etc/uci-defaults/99-luci-app-openbox $(1)/etc/uci-defaults/99-luci-app-openbox + + # 创建 CLI 管理命令软链接(直接指向 /opt/open-box/openwrt/bin/open-box 原版脚本) + $(INSTALL_DIR) $(1)/usr/bin + ln -sf /opt/open-box/openwrt/bin/open-box $(1)/usr/bin/open-box + + # 仅复制 _core 子目录内容,避免递归包含 + $(INSTALL_DIR) $(1)/opt/open-box + $(CP) $(PKG_BUILD_DIR)/_core/* $(1)/opt/open-box/ + chmod -R 0755 $(1)/opt/open-box/bin $(1)/opt/open-box/node/bin $(1)/opt/open-box/openwrt/bin 2>/dev/null || true + chmod +x $(1)/opt/open-box/update.sh $(1)/opt/open-box/uninstall.sh 2>/dev/null || true + echo "3036" > $(1)/opt/open-box/data/panel-port +endef + +define Package/luci-app-open-box/extra_provides + echo "libc.musl-x86_64.so.1"; +endef + +define Package/luci-app-open-box/prerm +#!/bin/sh +[ -n "$${IPKG_INSTROOT}" ] || { + /etc/init.d/openbox stop >/dev/null 2>&1 || true + /etc/init.d/openbox-panel stop >/dev/null 2>&1 || true +} +exit 0 +endef + +# 6. 包卸载后钩子:清理残留静态资源与防火墙规则 +define Package/luci-app-open-box/postrm +#!/bin/sh +[ -n "$${IPKG_INSTROOT}" ] || { + rm -rf /tmp/luci-*cache* 2>/dev/null || true + rm -rf /www/luci-static/resources/view/openbox 2>/dev/null || true + uci -q delete firewall.openbox_panel || true + uci -q delete firewall.openbox_dns || true + uci -q delete firewall.openbox_tun_forward || true + uci -q delete firewall.openbox_tun_input || true + uci -q delete firewall.openbox_v6block || true + for _ob_rule in $$(uci -q show firewall 2>/dev/null | sed -n 's/^firewall\.\(openbox_srv_[A-Za-z0-9_]*\)=rule$$/\1/p'); do + uci -q delete "firewall.$$_ob_rule" || true + done + if [ -n "$$(uci -q changes firewall)" ]; then + uci -q commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 || true + fi +} +exit 0 +endef + +$(eval $(call BuildPackage,luci-app-open-box)) \ No newline at end of file diff --git a/luci-app-open-box/README.md b/luci-app-open-box/README.md new file mode 100644 index 000000000..d29e74dea --- /dev/null +++ b/luci-app-open-box/README.md @@ -0,0 +1 @@ +来自 https://github.com/liandu2024/Open-Box diff --git a/luci-app-open-box/po/zh-cn b/luci-app-open-box/po/zh-cn new file mode 120000 index 000000000..8d69574dd --- /dev/null +++ b/luci-app-open-box/po/zh-cn @@ -0,0 +1 @@ +zh_Hans \ No newline at end of file diff --git a/luci-app-open-box/po/zh_Hans/openbox.po b/luci-app-open-box/po/zh_Hans/openbox.po new file mode 100644 index 000000000..c3ea3081d --- /dev/null +++ b/luci-app-open-box/po/zh_Hans/openbox.po @@ -0,0 +1,65 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "Open-Box" +msgstr "Open-Box" + +msgid "Open-Box 管理面板" +msgstr "Open-Box 管理面板" + +msgid "服务运行状态" +msgstr "服务运行状态" + +msgid "面板服务 (openbox-panel)" +msgstr "面板服务 (openbox-panel)" + +msgid "内核代理服务 (openbox)" +msgstr "内核代理服务 (openbox)" + +msgid "组件与更新维护" +msgstr "组件与更新维护" + +msgid "核心组件状态" +msgstr "核心组件状态" + +msgid "更新加速镜像" +msgstr "更新加速镜像" + +msgid "系统升级与维护" +msgstr "系统升级与维护" + +msgid "打开管理面板" +msgstr "打开管理面板" + +msgid "修改端口" +msgstr "修改端口" + +msgid "复制密码" +msgstr "复制密码" + +msgid "启动面板" +msgstr "启动面板" + +msgid "停止面板" +msgstr "停止面板" + +msgid "重启面板" +msgstr "重启面板" + +msgid "启动内核" +msgstr "启动内核" + +msgid "紧急停止内核 (恢复直连)" +msgstr "紧急停止内核 (恢复直连)" + +msgid "按配置重载/重启" +msgstr "按配置重载/重启" + +msgid "检查并升级到最新版" +msgstr "检查并升级到最新版" + +msgid "回退到上个版本 (Rollback)" +msgstr "回退到上个版本 (Rollback)" + +msgid "卸载 Open-Box" +msgstr "卸载 Open-Box" diff --git a/luci-app-open-box/root/etc/config/openbox b/luci-app-open-box/root/etc/config/openbox new file mode 100644 index 000000000..f9ca30b71 --- /dev/null +++ b/luci-app-open-box/root/etc/config/openbox @@ -0,0 +1,6 @@ +config openbox 'main' + option enabled '1' + option port '3036' + option channel 'mirror' + option mirror_prefix 'https://ghfast.top' + option auto_restart '1' diff --git a/luci-app-open-box/root/etc/init.d/openbox b/luci-app-open-box/root/etc/init.d/openbox new file mode 100755 index 000000000..983ab3b7a --- /dev/null +++ b/luci-app-open-box/root/etc/init.d/openbox @@ -0,0 +1,96 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2026 OpenWrt.org +# Open-Box Core Service (sing-box transparent proxy) + +START=96 +STOP=09 +USE_PROCD=1 + +INSTALL_ROOT="/opt/open-box" + +openbox_cleanup() { + if command -v uci >/dev/null 2>&1; then + local changed=0 + for rule in openbox_dns openbox_tun_forward openbox_tun_input openbox_v6block; do + if [ -n "$(uci -q get firewall.$rule 2>/dev/null)" ]; then + uci -q delete firewall.$rule + changed=1 + fi + done + for _ob_rule in $(uci -q show firewall 2>/dev/null | sed -n 's/^firewall\.\(openbox_srv_[A-Za-z0-9_]*\)=rule$/\1/p'); do + uci -q delete "firewall.$_ob_rule" || true + changed=1 + done + if [ "$changed" = "1" ] && [ -n "$(uci -q changes firewall)" ]; then + uci -q commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 || true + fi + fi + + if command -v nft >/dev/null 2>&1; then + nft delete table inet openbox 2>/dev/null || true + fi +} + +start_service() { + if [ -f "$INSTALL_ROOT/openwrt/initd/openbox" ] && [ ! -L "$INSTALL_ROOT/openwrt/initd/openbox" ]; then + "$INSTALL_ROOT/openwrt/initd/openbox" start + return $? + fi + + if [ ! -d "$INSTALL_ROOT" ]; then + echo "[openbox] 核心组件尚未安装在 $INSTALL_ROOT,请先安装或下载核心组件。" >&2 + return 1 + fi + + local deploy_cli="$INSTALL_ROOT/panel/server/cli/deploy.mjs" + local node_bin="$INSTALL_ROOT/node/bin/node" + local core_bin="$INSTALL_ROOT/bin/sing-box" + + if [ -x "$node_bin" ] && [ -f "$deploy_cli" ]; then + OPENBOX_ROOT="$INSTALL_ROOT" ZASHBOARD_DB_PATH="$INSTALL_ROOT/data/openbox.sqlite" \ + OPENSSL_CONF=/dev/null LD_LIBRARY_PATH="$INSTALL_ROOT/node/lib" \ + "$node_bin" "$deploy_cli" >/dev/null 2>&1 + return $? + elif [ -x "$core_bin" ] && [ -f "$INSTALL_ROOT/etc/config.json" ]; then + procd_open_instance openbox + procd_set_param command "$core_bin" run -c "$INSTALL_ROOT/etc/config.json" -D "$INSTALL_ROOT" + procd_set_param respawn + procd_set_param limits core="unlimited" + procd_close_instance + else + echo "[openbox] 核心服务未就绪,请在面板完成订阅或分流配置后启动。" >&2 + return 1 + fi +} + +stop_service() { + if [ -f "$INSTALL_ROOT/openwrt/initd/openbox" ] && [ ! -L "$INSTALL_ROOT/openwrt/initd/openbox" ]; then + "$INSTALL_ROOT/openwrt/initd/openbox" stop + return $? + fi + + if [ -x "$INSTALL_ROOT/bin/sing-box" ]; then + killall -9 sing-box 2>/dev/null || true + fi + openbox_cleanup +} + +restart() { + stop + sleep 1 + start +} + +status() { + if [ -x "$INSTALL_ROOT/bin/sing-box" ] && pidof sing-box >/dev/null; then + echo "openbox is running (pid $(pidof sing-box))" + return 0 + fi + echo "openbox is not running" + return 1 +} + +reload_service() { + restart +} diff --git a/luci-app-open-box/root/etc/init.d/openbox-panel b/luci-app-open-box/root/etc/init.d/openbox-panel new file mode 100755 index 000000000..2392a7893 --- /dev/null +++ b/luci-app-open-box/root/etc/init.d/openbox-panel @@ -0,0 +1,98 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2026 OpenWrt.org +# Open-Box Panel Web Service + +START=95 +STOP=10 +USE_PROCD=1 + +INSTALL_ROOT="/opt/open-box" + +openbox_get_port() { + local p="" + [ -f "$INSTALL_ROOT/data/panel-port" ] && p=$(cat "$INSTALL_ROOT/data/panel-port" 2>/dev/null | tr -dc '0-9') + if [ -z "$p" ]; then + config_load openbox + config_get p main port 3036 + fi + [ -n "$p" ] || p=3036 + echo "$p" +} + +ensure_firewall_rule() { + local port="$1" + command -v uci >/dev/null 2>&1 || return 0 + + local cur_port=$(uci -q get firewall.openbox_panel.dest_port 2>/dev/null) + if [ "$cur_port" != "$port" ]; then + uci -q delete firewall.openbox_panel 2>/dev/null || true + uci -q set firewall.openbox_panel=rule + uci -q set firewall.openbox_panel.name='Open-Box Panel' + uci -q set firewall.openbox_panel.src='lan' + uci -q set firewall.openbox_panel.proto='tcp' + uci -q set firewall.openbox_panel.dest_port="$port" + uci -q set firewall.openbox_panel.target='ACCEPT' + uci -q commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 || true + fi +} + +start_service() { + if [ -f "$INSTALL_ROOT/openwrt/initd/openbox-panel" ] && [ ! -L "$INSTALL_ROOT/openwrt/initd/openbox-panel" ]; then + "$INSTALL_ROOT/openwrt/initd/openbox-panel" start + return $? + fi + + if [ ! -d "$INSTALL_ROOT" ] || [ ! -x "$INSTALL_ROOT/node/bin/node" ]; then + echo "[openbox-panel] 核心未安装在 $INSTALL_ROOT,请先执行 open-box install 或在 LuCI 页面下载安装核心。" >&2 + return 1 + fi + + local node_bin="$INSTALL_ROOT/node/bin/node" + local panel_app="$INSTALL_ROOT/panel/server/index.mjs" + [ -f "$panel_app" ] || panel_app="$INSTALL_ROOT/panel/server/index.js" + + local port=$(openbox_get_port) + mkdir -p "$INSTALL_ROOT/data" 2>/dev/null || true + echo "$port" > "$INSTALL_ROOT/data/panel-port" + ensure_firewall_rule "$port" + + if [ -f "$INSTALL_ROOT/openwrt/bin/open-box" ] && [ ! -e /usr/bin/open-box ]; then + ln -sf "$INSTALL_ROOT/openwrt/bin/open-box" /usr/bin/open-box 2>/dev/null || true + fi + + procd_open_instance openbox-panel + procd_set_param command "$node_bin" "$panel_app" + procd_set_param env OPENBOX_ROOT="$INSTALL_ROOT" OPENSSL_CONF=/dev/null LD_LIBRARY_PATH="$INSTALL_ROOT/node/lib" PORT="$port" + procd_set_param respawn 3600 5 0 + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_close_instance +} + +stop_service() { + if [ -f "$INSTALL_ROOT/openwrt/initd/openbox-panel" ] && [ ! -L "$INSTALL_ROOT/openwrt/initd/openbox-panel" ]; then + "$INSTALL_ROOT/openwrt/initd/openbox-panel" stop + return $? + fi + return 0 +} + +status() { + if pgrep -f "$INSTALL_ROOT/panel/server" >/dev/null 2>&1; then + local pid=$(pgrep -f "$INSTALL_ROOT/panel/server" | head -n 1) + local port=$(openbox_get_port) + echo "openbox-panel is running (pid $pid, port $port)" + return 0 + fi + echo "openbox-panel is not running" + return 1 +} + +reload_service() { + restart +} + +service_triggers() { + procd_add_reload_trigger "openbox" +} diff --git a/luci-app-open-box/root/etc/uci-defaults/99-luci-app-openbox b/luci-app-open-box/root/etc/uci-defaults/99-luci-app-openbox new file mode 100644 index 000000000..1871a2b12 --- /dev/null +++ b/luci-app-open-box/root/etc/uci-defaults/99-luci-app-openbox @@ -0,0 +1,26 @@ +#!/bin/sh + +# Set default firewall rule for openbox-panel +uci -q get firewall.openbox_panel >/dev/null || { + uci -q set firewall.openbox_panel=rule + uci -q set firewall.openbox_panel.name='Open-Box Panel' + uci -q set firewall.openbox_panel.src='lan' + uci -q set firewall.openbox_panel.proto='tcp' + uci -q set firewall.openbox_panel.dest_port='3036' + uci -q set firewall.openbox_panel.target='ACCEPT' + uci -q commit firewall +} + +# Create open-box CLI link if available +[ -e /usr/bin/open-box ] || { + if [ -f /usr/share/openbox/open-box ]; then + ln -sf /usr/share/openbox/open-box /usr/bin/open-box + elif [ -f /opt/open-box/openwrt/bin/open-box ]; then + ln -sf /opt/open-box/openwrt/bin/open-box /usr/bin/open-box + fi +} + +# Clean LuCI cache +rm -rf /tmp/luci-*cache* 2>/dev/null || true + +exit 0 diff --git a/luci-app-open-box/root/usr/bin/open-box b/luci-app-open-box/root/usr/bin/open-box new file mode 100755 index 000000000..6522ccf8c --- /dev/null +++ b/luci-app-open-box/root/usr/bin/open-box @@ -0,0 +1,208 @@ +#!/bin/sh +# Open-Box 命令行管理工具 +INSTALL_ROOT="/opt/open-box" +OPENBOX_PORT_FILE="$INSTALL_ROOT/data/panel-port" +OPENBOX_PORT_FALLBACK=2026 +OPENBOX_PORT_DEFAULT=3036 +OPENBOX_RESERVED_PORTS="9095 7853 7854 7891 53 22 80 443" + +if [ -f "$INSTALL_ROOT/openwrt/bin/open-box" ] && [ "$0" != "$INSTALL_ROOT/openwrt/bin/open-box" ] && [ ! -L "$INSTALL_ROOT/openwrt/bin/open-box" ]; then + exec "$INSTALL_ROOT/openwrt/bin/open-box" "$@" +fi + +openbox_port_problem() { + _p="$1" + case "$_p" in + ''|*[!0-9]*) echo "端口要填 1024-65535 的数字"; return 0 ;; + esac + if [ "$_p" -lt 1024 ] || [ "$_p" -gt 65535 ]; then + echo "端口要在 1024-65535 之间(1024 以下是系统保留端口)" + return 0 + fi + for _r in $OPENBOX_RESERVED_PORTS; do + if [ "$_p" = "$_r" ]; then + echo "$_p 是 Open-Box 自己或系统服务在用的端口(内核 API / DNS / SSH / HTTP 等),换一个" + return 0 + fi + done + _busy="" + if command -v ss >/dev/null 2>&1; then + _busy=$(ss -ltn 2>/dev/null | awk 'NR>1 {print $4}' | sed 's/.*[:.]//' | grep -x "$_p" | head -n 1) + elif command -v netstat >/dev/null 2>&1; then + _busy=$(netstat -ltn 2>/dev/null | awk '{print $4}' | sed 's/.*[:.]//' | grep -x "$_p" | head -n 1) + fi + if [ -n "$_busy" ]; then + echo "$_p 已经被别的程序占用(已在监听)" + return 0 + fi + return 1 +} + +openbox_current_port() { + _cp=$(cat "$OPENBOX_PORT_FILE" 2>/dev/null | tr -dc '0-9') + [ -n "$_cp" ] || _cp="$OPENBOX_PORT_DEFAULT" + printf '%s\n' "$_cp" +} + +openbox_get_lan_ip() { + LAN_IP="" + command -v uci >/dev/null 2>&1 && LAN_IP=$(uci -q get network.lan.ipaddr 2>/dev/null | tr " " "\n" | head -n 1 | cut -d/ -f1) + if [ -z "$LAN_IP" ] && command -v ip >/dev/null 2>&1; then + LAN_IP=$(ip -4 -o addr show br-lan 2>/dev/null | awk '{ print $4 }' | cut -d/ -f1 | head -n 1) + fi + [ -n "$LAN_IP" ] || LAN_IP="192.168.1.1" + printf '%s\n' "$LAN_IP" +} + +openbox_get_password() { + if [ -f "$INSTALL_ROOT/data/openbox.sqlite" ] && [ -x "$INSTALL_ROOT/node/bin/node" ]; then + _pw=$(OPENSSL_CONF=/dev/null LD_LIBRARY_PATH="$INSTALL_ROOT/node/lib" "$INSTALL_ROOT/node/bin/node" -e ' + try { + const sqlite3 = require("sqlite3"); + const db = new sqlite3.Database("'$INSTALL_ROOT'/data/openbox.sqlite", sqlite3.OPEN_READONLY, (err) => { + if (err) process.exit(1); + db.get("SELECT value FROM settings WHERE key = ?", ["password"], (e, row) => { + if (row && row.value) console.log(row.value); + db.close(); + }); + }); + } catch (_) {} + ' 2>/dev/null) + if [ -n "$_pw" ]; then + printf '%s\n' "$_pw" + return 0 + fi + fi + if [ -f "$INSTALL_ROOT/data/password" ]; then + cat "$INSTALL_ROOT/data/password" 2>/dev/null + return 0 + fi + echo "尚未设置(首次打开面板设置管理密码)" +} + +openbox_get_version() { + _ver=$(sed -n 's/.*"version" *: *"\([^"]*\)".*/\1/p' "$INSTALL_ROOT/meta.json" 2>/dev/null | head -n 1) + [ -n "$_ver" ] || _ver="未安装" + printf '%s\n' "$_ver" +} + +cmd="${1:-}" + +case "$cmd" in + password) + openbox_get_password + exit 0 + ;; + port) + if [ $# -ge 2 ]; then + new_port="$2" + _reason=$(openbox_port_problem "$new_port") && { + echo "面板端口不能用:$_reason" >&2 + exit 1 + } + mkdir -p "$INSTALL_ROOT/data" + printf '%s\n' "$new_port" > "$OPENBOX_PORT_FILE" + if command -v uci >/dev/null 2>&1; then + uci -q set openbox.main.port="$new_port" + uci -q set firewall.openbox_panel.dest_port="$new_port" + uci -q commit openbox 2>/dev/null || true + uci -q commit firewall 2>/dev/null || true + /etc/init.d/firewall reload >/dev/null 2>&1 || true + fi + echo "面板端口已修改为: $new_port" + /etc/init.d/openbox-panel restart >/dev/null 2>&1 || true + exit 0 + else + openbox_current_port + exit 0 + fi + ;; + check) + if [ -f "$INSTALL_ROOT/update.sh" ]; then + sh "$INSTALL_ROOT/update.sh" --probe direct + elif [ -f /usr/share/openbox/update.sh ]; then + sh /usr/share/openbox/update.sh --probe direct + else + echo "未找到更新脚本" + fi + exit 0 + ;; + update) + shift + if [ -f "$INSTALL_ROOT/update.sh" ]; then + sh "$INSTALL_ROOT/update.sh" "$@" + elif [ -f /usr/share/openbox/update.sh ]; then + sh /usr/share/openbox/update.sh "$@" + else + echo "未找到更新脚本" >&2 + exit 1 + fi + exit 0 + ;; + restart) + /etc/init.d/openbox restart + /etc/init.d/openbox-panel restart + echo "已重启 Open-Box 服务与面板" + exit 0 + ;; + uninstall) + shift + if [ -f "$INSTALL_ROOT/uninstall.sh" ]; then + sh "$INSTALL_ROOT/uninstall.sh" "$@" + elif [ -f /usr/share/openbox/uninstall.sh ]; then + sh /usr/share/openbox/uninstall.sh "$@" + else + /etc/init.d/openbox stop + /etc/init.d/openbox-panel stop + rm -rf "$INSTALL_ROOT" + echo "已停止并清理" + fi + exit 0 + ;; + install) + shift + if [ -f /usr/share/openbox/install.sh ]; then + sh /usr/share/openbox/install.sh "$@" + else + curl -fsSL https://raw.githubusercontent.com/liandu2024/Open-Box/main/scripts/install.sh | sh -s -- "$@" + fi + exit 0 + ;; + *) + VERSION=$(openbox_get_version) + echo "" + echo "Open-Box $VERSION" + echo " 1) 当前密码" + echo " 2) 重新启动" + echo " 3) 检查升级" + echo " 4) 卸载" + echo " 5) 退出" + printf '请选择 [1-5]: ' + read -r choice + case "$choice" in + 1) + port=$(openbox_current_port) + lan_ip=$(openbox_get_lan_ip) + pw=$(openbox_get_password) + echo "" + echo " 面板地址: http://$lan_ip:$port" + echo " 当前密码: $pw" + echo "" + ;; + 2) + /etc/init.d/openbox restart + /etc/init.d/openbox-panel restart + echo "服务已重启。" + ;; + 3) + sh "$0" update + ;; + 4) + sh "$0" uninstall + ;; + 5|*) + exit 0 + ;; + esac + ;; +esac diff --git a/luci-app-open-box/root/usr/share/luci/menu.d/luci-app-openbox.json b/luci-app-open-box/root/usr/share/luci/menu.d/luci-app-openbox.json new file mode 100644 index 000000000..7bc54201c --- /dev/null +++ b/luci-app-open-box/root/usr/share/luci/menu.d/luci-app-openbox.json @@ -0,0 +1,12 @@ +{ + "admin/services/openbox": { + "title": "Open-Box", + "action": { + "type": "view", + "path": "openbox/main" + }, + "depends": { + "acl": [ "luci-app-openbox" ] + } + } +} diff --git a/luci-app-open-box/root/usr/share/openbox/install.sh b/luci-app-open-box/root/usr/share/openbox/install.sh new file mode 100755 index 000000000..11369f3ac --- /dev/null +++ b/luci-app-open-box/root/usr/share/openbox/install.sh @@ -0,0 +1,136 @@ +#!/bin/sh +# Open-Box 一键安装脚本 +set -eu +umask 022 + +REPO="liandu2024/Open-Box" +INSTALL_ROOT="/opt/open-box" +CHANNEL="mirror" +MIRROR_PREFIX="https://ghfast.top" +PANEL_PORT="3036" + +info() { echo "[open-box] $*"; } +warn() { echo "[open-box] 警告:$*" >&2; } +die() { echo "[open-box] 错误:$*" >&2; exit 1; } + +while [ $# -gt 0 ]; do + case "$1" in + --mirror) + CHANNEL="mirror" + shift + if [ $# -ge 1 ]; then + case "$1" in + --*) ;; + *) MIRROR_PREFIX="$1"; shift ;; + esac + fi + ;; + --direct) + CHANNEL="direct" + MIRROR_PREFIX="" + shift + ;; + --port) + shift + [ $# -ge 1 ] || die "--port 后面要跟端口号" + PANEL_PORT="$1" + shift + ;; + *) shift ;; + esac +done + +detect_arch() { + RAW_ARCH=$(uname -m 2>/dev/null || true) + case "$RAW_ARCH" in + x86_64) ARCH="x64" ;; + aarch64) ARCH="arm64" ;; + *) die "不支持的 CPU 架构:${RAW_ARCH:-未知}。Open-Box 目前仅支持 x86_64 与 aarch64(arm64)。" ;; + esac +} + +detect_arch + +if [ -f "/etc/config/openbox" ]; then + p=$(uci -q get openbox.main.port 2>/dev/null || true) + [ -n "$p" ] && PANEL_PORT="$p" +fi + +TMP_DL=$(mktemp -d /tmp/openbox-inst.XXXXXX 2>/dev/null || echo "/tmp/openbox-inst.$$") +mkdir -p "$TMP_DL" +trap 'rm -rf "$TMP_DL"' EXIT INT TERM + +ASSET="open-box-linux-${ARCH}.tar.gz" +ASSET_URL="https://github.com/$REPO/releases/latest/download/$ASSET" +SHA_URL="$ASSET_URL.sha256" + +build_url() { + url="$1" + if [ "$CHANNEL" = "mirror" ] && [ -n "$MIRROR_PREFIX" ]; then + case "$MIRROR_PREFIX" in + http://*|https://*) printf '%s/%s +' "${MIRROR_PREFIX%/}" "$url" ;; + *) printf 'https://%s/%s +' "${MIRROR_PREFIX%/}" "$url" ;; + esac + else + printf '%s +' "$url" + fi +} + +info "下载校验和与发布包: $ASSET ..." +curl -fsSL -o "$TMP_DL/$ASSET.sha256" "$(build_url "$SHA_URL")" 2>/dev/null || wget -q -O "$TMP_DL/$ASSET.sha256" "$(build_url "$SHA_URL")" || die "下载校验文件失败" +curl -fsSL -o "$TMP_DL/$ASSET" "$(build_url "$ASSET_URL")" 2>/dev/null || wget -q -O "$TMP_DL/$ASSET" "$(build_url "$ASSET_URL")" || die "下载发布包失败" + +info "校验 SHA256 ..." +( cd "$TMP_DL" && sha256sum -c "$ASSET.sha256" >/dev/null 2>&1 ) || die "安装包校验失败 (SHA256 不匹配)" + +info "解包到 $INSTALL_ROOT ..." +mkdir -p "$INSTALL_ROOT" +tar -xzf "$TMP_DL/$ASSET" -C "$INSTALL_ROOT" || die "解包失败" +chown -R 0:0 "$INSTALL_ROOT" 2>/dev/null || true + +mkdir -p "$INSTALL_ROOT/data" +printf '%s +' "$PANEL_PORT" > "$INSTALL_ROOT/data/panel-port" +if [ "$CHANNEL" = "mirror" ]; then + printf 'mirror +%s +' "$MIRROR_PREFIX" > "$INSTALL_ROOT/data/channel" +else + printf 'direct +' > "$INSTALL_ROOT/data/channel" +fi + +cp -f "$INSTALL_ROOT/openwrt/initd/openbox" /etc/init.d/openbox 2>/dev/null || true +cp -f "$INSTALL_ROOT/openwrt/initd/openbox-panel" /etc/init.d/openbox-panel 2>/dev/null || true +chmod +x /etc/init.d/openbox /etc/init.d/openbox-panel 2>/dev/null || true + +if [ -f "$INSTALL_ROOT/openwrt/bin/open-box" ]; then + chmod +x "$INSTALL_ROOT/openwrt/bin/open-box" 2>/dev/null || true + ln -sf "$INSTALL_ROOT/openwrt/bin/open-box" /usr/bin/open-box 2>/dev/null || true +fi + +if [ -d "$INSTALL_ROOT/openwrt/luci/htdocs/luci-static/resources/view/openbox" ]; then + mkdir -p /www/luci-static/resources/view/openbox + cp -f "$INSTALL_ROOT/openwrt/luci/htdocs/luci-static/resources/view/openbox/"*.js /www/luci-static/resources/view/openbox/ 2>/dev/null || true +fi + +if [ -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/luci/menu.d/luci-app-openbox.json" ]; then + mkdir -p /usr/share/luci/menu.d + cp -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/luci/menu.d/luci-app-openbox.json" /usr/share/luci/menu.d/ 2>/dev/null || true +fi + +if [ -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/rpcd/acl.d/luci-app-openbox.json" ]; then + mkdir -p /usr/share/rpcd/acl.d + cp -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/rpcd/acl.d/luci-app-openbox.json" /usr/share/rpcd/acl.d/ 2>/dev/null || true +fi + +rm -rf /tmp/luci-*cache* 2>/dev/null || true +/etc/init.d/rpcd restart >/dev/null 2>&1 || true + +/etc/init.d/openbox-panel enable >/dev/null 2>&1 || true +/etc/init.d/openbox-panel restart >/dev/null 2>&1 || true + +info "Open-Box 核心组件安装完成!" diff --git a/luci-app-open-box/root/usr/share/openbox/uninstall.sh b/luci-app-open-box/root/usr/share/openbox/uninstall.sh new file mode 100755 index 000000000..b32993e2a --- /dev/null +++ b/luci-app-open-box/root/usr/share/openbox/uninstall.sh @@ -0,0 +1,85 @@ +#!/bin/sh +# Open-Box 卸载清理脚本 +set -eu + +INSTALL_ROOT="/opt/open-box" +STATUS_PATH="/tmp/openbox-uninstall.status" +PURGE=0 +DETACH=0 + +while [ $# -gt 0 ]; do + case "$1" in + --purge) PURGE=1; shift ;; + --detach) DETACH=1; shift ;; + *) shift ;; + esac +done + +if [ "$DETACH" = "1" ]; then + _args="" + [ "$PURGE" = "1" ] && _args="--purge" + nohup sh "$0" $_args >/dev/null 2>&1 & + echo "卸载已在后台启动" + exit 0 +fi + +{ + echo "pid=$$" + echo "stage=stopping" +} > "$STATUS_PATH" 2>/dev/null || true + +/etc/init.d/openbox stop >/dev/null 2>&1 || true +/etc/init.d/openbox-panel stop >/dev/null 2>&1 || true +/etc/init.d/openbox disable >/dev/null 2>&1 || true +/etc/init.d/openbox-panel disable >/dev/null 2>&1 || true + +{ + echo "pid=$$" + echo "stage=firewall" +} > "$STATUS_PATH" 2>/dev/null || true + +if command -v uci >/dev/null 2>&1; then + uci -q delete firewall.openbox_panel || true + uci -q delete firewall.openbox_dns || true + uci -q delete firewall.openbox_tun_forward || true + uci -q delete firewall.openbox_tun_input || true + uci -q delete firewall.openbox_v6block || true + for _ob_rule in $(uci -q show firewall 2>/dev/null | sed -n 's/^firewall\.\(openbox_srv_[A-Za-z0-9_]*\)=rule$/\1/p'); do + uci -q delete "firewall.$_ob_rule" || true + done + if [ -n "$(uci -q changes firewall)" ]; then + uci -q commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 || true + fi +fi + +{ + echo "pid=$$" + echo "stage=files" +} > "$STATUS_PATH" 2>/dev/null || true + +rm -f /etc/init.d/openbox /etc/init.d/openbox-panel +rm -f /www/luci-static/resources/view/openbox/main.js /www/luci-static/resources/view/openbox/status.js +rmdir /www/luci-static/resources/view/openbox 2>/dev/null || true +rm -f /usr/share/luci/menu.d/luci-app-openbox.json +rm -f /usr/share/rpcd/acl.d/luci-app-openbox.json +[ -L /usr/bin/open-box ] && rm -f /usr/bin/open-box +rm -rf /tmp/luci-*cache* 2>/dev/null || true + +if [ "$PURGE" = "1" ]; then + rm -rf "$INSTALL_ROOT" +else + for entry in "$INSTALL_ROOT"/*; do + [ -e "$entry" ] || continue + base=$(basename -- "$entry") + [ "$base" = "data" ] && continue + rm -rf "$entry" + done +fi + +{ + echo "pid=$$" + echo "stage=done" +} > "$STATUS_PATH" 2>/dev/null || true + +echo "Open-Box 卸载完成" diff --git a/luci-app-open-box/root/usr/share/openbox/update.sh b/luci-app-open-box/root/usr/share/openbox/update.sh new file mode 100755 index 000000000..b60f24eba --- /dev/null +++ b/luci-app-open-box/root/usr/share/openbox/update.sh @@ -0,0 +1,204 @@ +#!/bin/sh +# Open-Box 更新/回退脚本 +set -eu +umask 022 + +REPO="liandu2024/Open-Box" +INSTALL_ROOT="/opt/open-box" +STATUS_PATH="/tmp/openbox-update.status" +CANCEL_FLAG="/tmp/openbox-update.cancel" +UPDATE_LOG="/tmp/openbox-update.log" +STATUS_PID="$$" + +DETACH=0 +ROLLBACK_MODE=0 +CHANNEL="direct" +MIRROR_PREFIX="" +PROBE_CHANNEL="" +CANCEL_MODE=0 + +info() { echo "[open-box] $*"; } +warn() { echo "[open-box] 警告:$*" >&2; } +die() { + echo "[open-box] 错误:$*" >&2 + write_status failed "" "" "$*" + exit 1 +} + +write_status() { + [ -n "$STATUS_PID" ] || return 0 + _ws_tmp="$STATUS_PATH.$$.tmp" + { + echo "pid=$STATUS_PID" + echo "stage=$1" + echo "bytes=${2:-}" + echo "total=${3:-}" + echo "message=${4:-}" + } > "$_ws_tmp" 2>/dev/null && mv -f "$_ws_tmp" "$STATUS_PATH" 2>/dev/null || true +} + +check_cancel() { + if [ -e "$CANCEL_FLAG" ]; then + write_status cancelled "" "" "已取消更新" + exit 0 + fi +} + +while [ $# -gt 0 ]; do + case "$1" in + --detach) DETACH=1; shift ;; + --rollback) ROLLBACK_MODE=1; shift ;; + --cancel) CANCEL_MODE=1; shift ;; + --direct) CHANNEL="direct"; MIRROR_PREFIX=""; shift ;; + --mirror) + CHANNEL="mirror" + shift + if [ $# -ge 1 ]; then + case "$1" in + --*) ;; + *) MIRROR_PREFIX="$1"; shift ;; + esac + fi + ;; + --probe) + shift + PROBE_CHANNEL="$1" + shift + ;; + *) shift ;; + esac +done + +if [ "$CANCEL_MODE" = "1" ]; then + touch "$CANCEL_FLAG" 2>/dev/null || true + echo "requested" + exit 0 +fi + +if [ -n "$PROBE_CHANNEL" ]; then + start_time=$(date +%s%N 2>/dev/null || date +%s) + target="https://github.com/$REPO/releases/latest/download/open-box-linux-x64.tar.gz.sha256" + if [ "$PROBE_CHANNEL" != "direct" ]; then + case "$PROBE_CHANNEL" in + http://*|https://*) target="${PROBE_CHANNEL%/}/$target" ;; + *) target="https://${PROBE_CHANNEL%/}/$target" ;; + esac + fi + if curl -fsSL --connect-timeout 8 --max-time 15 -o /dev/null "$target" 2>/dev/null || wget -q --timeout=15 -O /dev/null "$target" 2>/dev/null; then + end_time=$(date +%s%N 2>/dev/null || date +%s) + ms=$(( (end_time - start_time) / 1000000 2>/dev/null || 100 )) + [ "$ms" -le 0 ] && ms=80 + echo "ok $ms ms" + else + echo "fail 连接超时或无法访问" + fi + exit 0 +fi + +if [ "$DETACH" = "1" ]; then + : > "$UPDATE_LOG" 2>/dev/null || true + write_status starting "" "" "" + rm -f "$CANCEL_FLAG" 2>/dev/null || true + _args="" + [ "$ROLLBACK_MODE" = "1" ] && _args="$_args --rollback" + if [ "$CHANNEL" = "mirror" ]; then + _args="$_args --mirror $MIRROR_PREFIX" + else + _args="$_args --direct" + fi + nohup sh "$0" $_args >"$UPDATE_LOG" 2>&1 /dev/null || true) +case "$RAW_ARCH" in + x86_64) ARCH="x64" ;; + aarch64) ARCH="arm64" ;; + *) die "不支持的 CPU 架构: $RAW_ARCH" ;; +esac + +ASSET="open-box-linux-${ARCH}.tar.gz" +ASSET_URL="https://github.com/$REPO/releases/latest/download/$ASSET" +SHA_URL="$ASSET_URL.sha256" + +build_url() { + url="$1" + if [ "$CHANNEL" = "mirror" ] && [ -n "$MIRROR_PREFIX" ]; then + case "$MIRROR_PREFIX" in + http://*|https://*) printf '%s/%s +' "${MIRROR_PREFIX%/}" "$url" ;; + *) printf 'https://%s/%s +' "${MIRROR_PREFIX%/}" "$url" ;; + esac + else + printf '%s +' "$url" + fi +} + +TMP_DL=$(mktemp -d /tmp/openbox-upd.XXXXXX 2>/dev/null || echo "/tmp/openbox-upd.$$") +mkdir -p "$TMP_DL" +trap 'rm -rf "$TMP_DL"' EXIT INT TERM + +write_status downloading 0 100000000 "开始下载" +check_cancel + +curl -fsSL -o "$TMP_DL/$ASSET.sha256" "$(build_url "$SHA_URL")" 2>/dev/null || wget -q -O "$TMP_DL/$ASSET.sha256" "$(build_url "$SHA_URL")" || die "下载校验和失败" +check_cancel + +curl -fsSL -o "$TMP_DL/$ASSET" "$(build_url "$ASSET_URL")" 2>/dev/null || wget -q -O "$TMP_DL/$ASSET" "$(build_url "$ASSET_URL")" || die "下载升级包失败" +check_cancel + +write_status verifying "" "" "" +( cd "$TMP_DL" && sha256sum -c "$ASSET.sha256" >/dev/null 2>&1 ) || die "校验失败 (SHA256 不匹配)" + +write_status extracting "" "" "" +check_cancel + +STAGE_DIR="$INSTALL_ROOT/.update-stage.$$" +rm -rf "$STAGE_DIR" +mkdir -p "$STAGE_DIR" +tar -xzf "$TMP_DL/$ASSET" -C "$STAGE_DIR" || die "解包失败" + +write_status committing "" "" "" +/etc/init.d/openbox-panel stop >/dev/null 2>&1 || true +/etc/init.d/openbox stop >/dev/null 2>&1 || true + +for comp in node panel bin openwrt; do + if [ -e "$STAGE_DIR/$comp" ]; then + rm -rf "$INSTALL_ROOT/$comp" + mv "$STAGE_DIR/$comp" "$INSTALL_ROOT/$comp" + fi +done +[ -e "$STAGE_DIR/meta.json" ] && mv "$STAGE_DIR/meta.json" "$INSTALL_ROOT/meta.json" +rm -rf "$STAGE_DIR" + +cp -f "$INSTALL_ROOT/openwrt/initd/openbox" /etc/init.d/openbox 2>/dev/null || true +cp -f "$INSTALL_ROOT/openwrt/initd/openbox-panel" /etc/init.d/openbox-panel 2>/dev/null || true +chmod +x /etc/init.d/openbox /etc/init.d/openbox-panel 2>/dev/null || true + +if [ -f "$INSTALL_ROOT/openwrt/bin/open-box" ]; then + ln -sf "$INSTALL_ROOT/openwrt/bin/open-box" /usr/bin/open-box 2>/dev/null || true +fi +if [ -d "$INSTALL_ROOT/openwrt/luci/htdocs/luci-static/resources/view/openbox" ]; then + cp -f "$INSTALL_ROOT/openwrt/luci/htdocs/luci-static/resources/view/openbox/"*.js /www/luci-static/resources/view/openbox/ 2>/dev/null || true +fi +if [ -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/luci/menu.d/luci-app-openbox.json" ]; then + cp -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/luci/menu.d/luci-app-openbox.json" /usr/share/luci/menu.d/ 2>/dev/null || true +fi +if [ -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/rpcd/acl.d/luci-app-openbox.json" ]; then + cp -f "$INSTALL_ROOT/openwrt/luci/root/usr/share/rpcd/acl.d/luci-app-openbox.json" /usr/share/rpcd/acl.d/ 2>/dev/null || true +fi + +rm -rf /tmp/luci-*cache* 2>/dev/null || true +/etc/init.d/rpcd restart >/dev/null 2>&1 || true + +/etc/init.d/openbox-panel start >/dev/null 2>&1 || true +/etc/init.d/openbox start >/dev/null 2>&1 || true + +write_status done "" "" "升级完成" +info "升级完成!" diff --git a/luci-app-open-box/root/usr/share/rpcd/acl.d/luci-app-openbox.json b/luci-app-open-box/root/usr/share/rpcd/acl.d/luci-app-openbox.json new file mode 100644 index 000000000..1e20e5936 --- /dev/null +++ b/luci-app-open-box/root/usr/share/rpcd/acl.d/luci-app-openbox.json @@ -0,0 +1,34 @@ +{ + "luci-app-openbox": { + "description": "Grant UCI and system execution access for luci-app-openbox", + "read": { + "cgi-io": [ "backup" ], + "file": { + "/opt/open-box/meta.json": [ "read" ], + "/opt/open-box/data/panel-port": [ "read" ], + "/tmp/openbox-update.status": [ "read" ], + "/tmp/openbox-update.log": [ "read" ], + "/tmp/openbox-uninstall.status": [ "read" ], + "/tmp/openbox-uninstall.log": [ "read" ] + }, + "uci": [ "network", "firewall", "openbox" ], + "ubus": { + "service": [ "list" ] + } + }, + "write": { + "file": { + "/etc/init.d/openbox": [ "exec" ], + "/etc/init.d/openbox-panel": [ "exec" ], + "/usr/bin/open-box": [ "exec" ], + "/opt/open-box/openwrt/bin/open-box": [ "exec" ], + "/opt/open-box/update.sh": [ "exec" ], + "/opt/open-box/uninstall.sh": [ "exec" ], + "/usr/share/openbox/install.sh": [ "exec" ], + "/usr/share/openbox/update.sh": [ "exec" ], + "/usr/share/openbox/uninstall.sh": [ "exec" ] + }, + "uci": [ "firewall", "openbox" ] + } + } +} diff --git a/luci-app-open-box/root/www/luci-static/resources/view/openbox/main.js b/luci-app-open-box/root/www/luci-static/resources/view/openbox/main.js new file mode 100644 index 000000000..119f7305b --- /dev/null +++ b/luci-app-open-box/root/www/luci-static/resources/view/openbox/main.js @@ -0,0 +1,456 @@ +'use strict'; +'require view'; +'require fs'; +'require ui'; +'require uci'; +'require rpc'; +'require poll'; + +var callServiceList = rpc.declare({ + object: 'service', + method: 'list', + params: [ 'name' ], + expect: { '': {} } +}); + +return view.extend({ + pollInterval: 3, + + load: function() { + return Promise.all([ + fs.read('/opt/open-box/meta.json').catch(function() { return null; }), + fs.read('/opt/open-box/data/panel-port').catch(function() { return null; }), + fs.exec_direct('/usr/bin/open-box', [ 'password' ]).catch(function() { return ''; }), + callServiceList('openbox'), + callServiceList('openbox-panel'), + uci.load('network').catch(function() { return null; }), + uci.load('openbox').catch(function() { return null; }) + ]); + }, + + render: function(data) { + var metaRaw = data[0]; + var portRaw = data[1]; + var password = (data[2] || '').trim(); + var openboxSvc = data[3] || {}; + var panelSvc = data[4] || {}; + + var meta = null; + if (metaRaw) { + try { meta = JSON.parse(metaRaw); } catch(e) {} + } + + var port = (portRaw || '').replace(/[^0-9]/g, ''); + if (!port) { + port = (uci.get('openbox', 'main', 'port') || '3036'); + } + + var lanIp = uci.get('network', 'lan', 'ipaddr'); + if (Array.isArray(lanIp)) lanIp = lanIp[0]; + if (lanIp && lanIp.indexOf('/') !== -1) lanIp = lanIp.split('/')[0]; + if (!lanIp) lanIp = window.location.hostname || '192.168.1.1'; + + var panelRunning = (panelSvc['openbox-panel'] && panelSvc['openbox-panel']['instances'] && Object.keys(panelSvc['openbox-panel']['instances']).length > 0); + var coreRunning = (openboxSvc['openbox'] && openboxSvc['openbox']['instances'] && Object.keys(openboxSvc['openbox']['instances']).length > 0); + + var panelUrl = 'http://' + lanIp + ':' + port; + + var viewRoot = E('div', { 'class': 'cbi-map' }, [ + E('h2', {}, [ _('Open-Box') + ' ' + (meta && meta.version ? 'v' + meta.version : '') ]), + E('div', { 'class': 'cbi-map-descr' }, [ + _('Open-Box 是路由器上的一体化透明代理方案,内置 sing-box 内核、Node.js 运行时与 Web 管理面板。本页面为 LuCI 兜底管理页,可用于启停服务、修改端口、找回密码或执行维护操作。') + ]) + ]); + + // 1. 面板直达与密码卡片 + var accessCard = E('div', { 'class': 'cbi-section' }, [ + E('h3', {}, [ _('Open-Box 管理面板') ]), + E('div', { 'class': 'cbi-section-descr' }, [ + _('日常代理节点选择、分流规则配置、订阅管理及流量统计请在独立 Web 面板中进行。') + ]), + E('div', { 'class': 'table' }, [ + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left', 'style': 'width:30%' }, [ E('strong', {}, _('面板访问地址')) ]), + E('div', { 'class': 'td' }, [ + E('a', { 'href': panelUrl, 'target': '_blank', 'class': 'cbi-button cbi-button-action' }, [ + _('打开管理面板') + ' (' + panelUrl + ')' + ]) + ]) + ]), + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left' }, [ E('strong', {}, _('面板当前密码')) ]), + E('div', { 'class': 'td' }, [ + E('span', { 'style': 'font-family: monospace; font-size: 1.1em; color: #2c3e50; font-weight: bold;' }, [ + password || _('尚未设置(首次打开面板设置管理密码)') + ]), + password ? E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'style': 'margin-left: 1em;', + 'click': function() { + navigator.clipboard.writeText(password).then(function() { + ui.addNotification(null, E('p', {}, _('密码已复制到剪贴板。')), 'info'); + }); + } + }, [ _('复制密码') ]) : E('span') + ]) + ]), + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left' }, [ E('strong', {}, _('面板监听端口')) ]), + E('div', { 'class': 'td' }, [ + E('span', { 'style': 'font-family: monospace; margin-right: 1em;' }, [ port ]), + E('button', { + 'class': 'cbi-button cbi-button-apply', + 'click': ui.createHandlerFn(this, 'handlePortChange', port) + }, [ _('修改端口') ]) + ]) + ]) + ]) + ]); + viewRoot.appendChild(accessCard); + + // 2. 服务运行状态卡片 + var statusCard = E('div', { 'class': 'cbi-section' }, [ + E('h3', {}, [ _('服务运行状态') ]), + E('div', { 'class': 'table' }, [ + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left', 'style': 'width:30%' }, [ E('strong', {}, _('面板服务 (openbox-panel)')) ]), + E('div', { 'class': 'td' }, [ + E('span', { 'class': 'badge ' + (panelRunning ? 'badge-success' : 'badge-danger') }, [ + panelRunning ? _('运行中 (Running)') : _('已停止 (Stopped)') + ]), + E('div', { 'class': 'btn-group', 'style': 'display: inline-block; margin-left: 1.5em;' }, [ + E('button', { + 'class': 'cbi-button ' + (panelRunning ? 'cbi-button-reset' : 'cbi-button-action'), + 'click': ui.createHandlerFn(this, 'handleServiceAction', 'openbox-panel', panelRunning ? 'stop' : 'start') + }, [ panelRunning ? _('停止面板') : _('启动面板') ]), + E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'style': 'margin-left: 0.5em;', + 'click': ui.createHandlerFn(this, 'handleServiceAction', 'openbox-panel', 'restart') + }, [ _('重启面板') ]) + ]) + ]) + ]), + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left' }, [ E('strong', {}, _('内核代理服务 (openbox)')) ]), + E('div', { 'class': 'td' }, [ + E('span', { 'class': 'badge ' + (coreRunning ? 'badge-success' : 'badge-danger') }, [ + coreRunning ? _('运行中 (Running)') : _('已停止 (Stopped)') + ]), + E('div', { 'class': 'btn-group', 'style': 'display: inline-block; margin-left: 1.5em;' }, [ + E('button', { + 'class': 'cbi-button ' + (coreRunning ? 'cbi-button-reset' : 'cbi-button-action'), + 'click': ui.createHandlerFn(this, 'handleServiceAction', 'openbox', coreRunning ? 'stop' : 'start') + }, [ coreRunning ? _('紧急停止内核 (恢复直连)') : _('启动内核') ]), + E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'style': 'margin-left: 0.5em;', + 'click': ui.createHandlerFn(this, 'handleServiceAction', 'openbox', 'restart') + }, [ _('按配置重载/重启') ]) + ]) + ]) + ]) + ]) + ]); + viewRoot.appendChild(statusCard); + + // 3. 核心组件与更新维护卡片 + var hasCore = (meta !== null); + var maintenanceCard = E('div', { 'class': 'cbi-section' }, [ + E('h3', {}, [ _('组件与更新维护') ]), + E('div', { 'class': 'cbi-section-descr' }, [ + hasCore ? _('当前已安装 Open-Box 核心组件(安装目录:/opt/open-box)。') : + _('检测到核心组件尚未安装或 /opt/open-box 不完整。您可以直接使用下方一键下载安装功能完成初始化。') + ]), + E('div', { 'class': 'table' }, [ + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left', 'style': 'width:30%' }, [ E('strong', {}, _('核心组件状态')) ]), + E('div', { 'class': 'td' }, [ + hasCore ? E('span', { 'class': 'badge badge-success' }, [ + _('已就绪') + ' (' + (meta.arch || 'unknown') + ', ' + (meta.version || 'v' + meta.version) + ')' + ]) : E('span', { 'class': 'badge badge-danger' }, [ _('尚未就绪') ]), + !hasCore ? E('button', { + 'class': 'cbi-button cbi-button-action', + 'style': 'margin-left: 1em;', + 'click': ui.createHandlerFn(this, 'handleInstallCore') + }, [ _('一键安装核心组件') ]) : E('span') + ]) + ]), + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left' }, [ E('strong', {}, _('更新加速镜像')) ]), + E('div', { 'class': 'td' }, [ + E('select', { 'id': 'openbox_mirror_select', 'class': 'cbi-input-select' }, [ + E('option', { 'value': 'direct' }, _('GitHub 直连 (官方)')), + E('option', { 'value': 'https://ghfast.top', 'selected': 'selected' }, 'ghfast.top (' + _('内置推荐') + ')'), + E('option', { 'value': 'https://gh-proxy.com' }, 'gh-proxy.com'), + E('option', { 'value': 'https://gh.llkk.cc' }, 'gh.llkk.cc') + ]), + E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'style': 'margin-left: 1em;', + 'click': ui.createHandlerFn(this, 'handleTestLatency') + }, [ _('测速/检测可用性') ]), + E('span', { 'id': 'openbox_probe_result', 'style': 'margin-left: 1em; font-weight: bold;' }, '') + ]) + ]), + E('div', { 'class': 'tr' }, [ + E('div', { 'class': 'td left' }, [ E('strong', {}, _('系统升级与维护')) ]), + E('div', { 'class': 'td' }, [ + E('button', { + 'class': 'cbi-button cbi-button-apply', + 'click': ui.createHandlerFn(this, 'handleUpdate', false) + }, [ _('检查并升级到最新版') ]), + E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'style': 'margin-left: 0.5em;', + 'click': ui.createHandlerFn(this, 'handleUpdate', true) + }, [ _('回退到上个版本 (Rollback)') ]), + E('button', { + 'class': 'cbi-button cbi-button-reset', + 'style': 'margin-left: 1.5em;', + 'click': ui.createHandlerFn(this, 'handleUninstall') + }, [ _('卸载 Open-Box') ]) + ]) + ]) + ]) + ]); + viewRoot.appendChild(maintenanceCard); + + return viewRoot; + }, + + handleServiceAction: function(service, action) { + ui.showModal(_('正在处理'), [ + E('p', { 'class': 'spinning' }, _('正在执行操作,请稍候...')) + ]); + return fs.exec('/etc/init.d/' + service, [ action ]).then(function() { + window.location.reload(); + }).catch(function(e) { + ui.addNotification(null, E('p', {}, _('操作失败: ') + e.message), 'error'); + ui.hideModal(); + }); + }, + + handlePortChange: function(currentPort) { + var input = E('input', { + 'type': 'number', + 'class': 'cbi-input-text', + 'min': 1024, + 'max': 65535, + 'value': currentPort + }); + ui.showModal(_('修改面板端口'), [ + E('p', {}, _('请输入 1024 至 65535 之间的可用端口号(修改后将自动重启面板并放行防火墙):')), + input, + E('div', { 'class': 'right', 'style': 'margin-top: 1em;' }, [ + E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'click': ui.hideModal + }, [ _('取消') ]), + E('button', { + 'class': 'cbi-button cbi-button-apply', + 'style': 'margin-left: 0.5em;', + 'click': function() { + var newPort = input.value.trim(); + if (!newPort || isNaN(newPort) || newPort < 1024 || newPort > 65535) { + ui.addNotification(null, E('p', {}, _('请输入合法的端口号 (1024-65535)')), 'error'); + return; + } + ui.showModal(_('保存中'), [ E('p', { 'class': 'spinning' }, _('正在应用新端口并重启面板...')) ]); + fs.exec_direct('/usr/bin/open-box', [ 'port', newPort ]).then(function() { + window.location.reload(); + }).catch(function(e) { + ui.addNotification(null, E('p', {}, _('修改失败: ') + e.message), 'error'); + ui.hideModal(); + }); + } + }, [ _('保存并重启') ]) + ]) + ]); + }, + + handleTestLatency: function() { + var select = document.getElementById('openbox_mirror_select'); + var mirror = select ? select.value : 'direct'; + var resultSpan = document.getElementById('openbox_probe_result'); + if (resultSpan) { + resultSpan.textContent = _('正在检测...'); + resultSpan.style.color = '#3498db'; + } + + var args = [ '--probe', mirror ]; + var execPath = '/opt/open-box/update.sh'; + fs.stat(execPath).catch(function() { + return fs.stat('/usr/share/openbox/update.sh').then(function() { + execPath = '/usr/share/openbox/update.sh'; + }); + }).then(function() { + return fs.exec_direct(execPath, args); + }).then(function(out) { + if (resultSpan) { + var text = (out || '').trim(); + if (text.startsWith('ok')) { + resultSpan.textContent = '✓ ' + text.replace('ok', _('可用') + ': '); + resultSpan.style.color = '#27ae60'; + } else { + resultSpan.textContent = '✗ ' + text.replace('fail', _('失败') + ': '); + resultSpan.style.color = '#e74c3c'; + } + } + }).catch(function(err) { + if (resultSpan) { + resultSpan.textContent = '✗ ' + (err.message || _('检测出错')); + resultSpan.style.color = '#e74c3c'; + } + }); + }, + + handleInstallCore: function() { + var select = document.getElementById('openbox_mirror_select'); + var mirror = select ? select.value : 'https://ghfast.top'; + var args = []; + if (mirror !== 'direct') { + args = [ '--mirror', mirror ]; + } + + ui.showModal(_('安装核心组件'), [ + E('p', { 'class': 'spinning' }, _('正在下载并部署 Open-Box 完整核心组件(约需 1-3 分钟,视网络速度而定)...')) + ]); + + var script = '/usr/share/openbox/install.sh'; + fs.exec(script, args).then(function() { + ui.addNotification(null, E('p', {}, _('核心组件安装成功!')), 'info'); + window.location.reload(); + }).catch(function(e) { + ui.addNotification(null, E('p', {}, _('安装失败: ') + e.message), 'error'); + ui.hideModal(); + }); + }, + + handleUpdate: function(isRollback) { + var select = document.getElementById('openbox_mirror_select'); + var mirror = select ? select.value : 'direct'; + var args = [ '--detach' ]; + if (isRollback) args.push('--rollback'); + if (mirror === 'direct') { + args.push('--direct'); + } else { + args.push('--mirror'); + args.push(mirror); + } + + var execPath = '/opt/open-box/update.sh'; + fs.stat(execPath).catch(function() { + execPath = '/usr/share/openbox/update.sh'; + }).then(function() { + return fs.exec_direct(execPath, args); + }).then(function() { + var progressBar = E('div', { 'class': 'cbi-progressbar', 'title': '0%' }, [ E('div', { 'style': 'width: 0%' }) ]); + var statusText = E('p', {}, _('任务已派发,正在准备下载...')); + var logPre = E('pre', { 'style': 'max-height: 200px; overflow-y: scroll; font-size: 11px; background: #f8f9fa; padding: 8px;' }, ''); + + ui.showModal(isRollback ? _('正在执行版本回退') : _('正在升级 Open-Box'), [ + statusText, + progressBar, + E('p', { 'style': 'margin-top: 1em;' }, [ E('strong', {}, _('实时日志:')) ]), + logPre, + E('div', { 'class': 'right', 'style': 'margin-top: 1em;' }, [ + E('button', { + 'class': 'cbi-button cbi-button-reset', + 'click': function() { + fs.exec_direct(execPath, [ '--cancel' ]); + ui.hideModal(); + } + }, [ _('取消更新') ]) + ]) + ]); + + var timer = window.setInterval(function() { + Promise.all([ + fs.read('/tmp/openbox-update.status').catch(function() { return ''; }), + fs.read('/tmp/openbox-update.log').catch(function() { return ''; }) + ]).then(function(res) { + var st = res[0] || ''; + var lg = res[1] || ''; + logPre.textContent = lg; + logPre.scrollTop = logPre.scrollHeight; + + var stage = (st.match(/stage=([^\n]+)/) || [])[1]; + var bytes = parseInt((st.match(/bytes=([0-9]+)/) || [])[1] || 0); + var total = parseInt((st.match(/total=([0-9]+)/) || [])[1] || 0); + var msg = (st.match(/message=([^\n]*)/) || [])[1] || ''; + + if (stage === 'downloading') { + if (total > 0) { + var pct = Math.floor((bytes / total) * 100); + progressBar.firstElementChild.style.width = pct + '%'; + progressBar.setAttribute('title', pct + '%'); + statusText.textContent = _('正在下载发布包: ') + (bytes / 1048576).toFixed(1) + 'MB / ' + (total / 1048576).toFixed(1) + 'MB (' + pct + '%)'; + } else { + statusText.textContent = _('正在下载发布包: ') + (bytes / 1048576).toFixed(1) + 'MB'; + } + } else if (stage === 'extracting') { + progressBar.firstElementChild.style.width = '80%'; + statusText.textContent = _('正在解包并校验文件完整性...'); + } else if (stage === 'committing') { + progressBar.firstElementChild.style.width = '90%'; + statusText.textContent = _('正在替换旧组件并重启服务...'); + } else if (stage === 'done') { + window.clearInterval(timer); + progressBar.firstElementChild.style.width = '100%'; + statusText.textContent = _('操作完成!') + (msg ? ' (' + msg + ')' : ''); + window.setTimeout(function() { window.location.reload(); }, 2000); + } else if (stage === 'failed' || stage === 'cancelled') { + window.clearInterval(timer); + statusText.textContent = (stage === 'failed' ? _('操作失败: ') : _('操作已取消: ')) + msg; + } + }); + }, 1000); + }).catch(function(e) { + ui.addNotification(null, E('p', {}, _('启动升级失败: ') + e.message), 'error'); + }); + }, + + handleUninstall: function() { + var checkPurge = E('input', { 'type': 'checkbox' }); + ui.showModal(_('卸载 Open-Box'), [ + E('p', {}, _('确定要从系统中卸载 Open-Box 吗?')), + E('label', { 'class': 'cbi-checkbox', 'style': 'display: block; margin: 1em 0;' }, [ + checkPurge, + ' ' + _('同时删除所有用户数据(/opt/open-box/data 下的节点订阅、规则集与数据库)') + ]), + E('div', { 'class': 'right' }, [ + E('button', { + 'class': 'cbi-button cbi-button-neutral', + 'click': ui.hideModal + }, [ _('取消') ]), + E('button', { + 'class': 'cbi-button cbi-button-reset', + 'style': 'margin-left: 0.5em;', + 'click': function() { + var purge = checkPurge.checked; + var args = [ '--detach' ]; + if (purge) args.push('--purge'); + + var execPath = '/opt/open-box/uninstall.sh'; + fs.stat(execPath).catch(function() { + execPath = '/usr/share/openbox/uninstall.sh'; + }).then(function() { + return fs.exec_direct(execPath, args); + }).then(function() { + ui.showModal(_('卸载中'), [ + E('p', { 'class': 'spinning' }, _('正在停止服务并清理残留文件...')) + ]); + window.setTimeout(function() { + window.location.href = window.location.pathname.replace(/\/admin\/services\/openbox.*/, '/admin/status/overview'); + }, 4000); + }).catch(function(err) { + ui.addNotification(null, E('p', {}, _('卸载失败: ') + err.message), 'error'); + ui.hideModal(); + }); + } + }, [ _('确认卸载') ]) + ]) + ]); + } +}); diff --git a/luci-theme-edge/.gitignore b/luci-theme-edge/.gitignore deleted file mode 100644 index 8e5a63f1d..000000000 --- a/luci-theme-edge/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/Screenshots diff --git a/luci-theme-edge/Makefile b/luci-theme-edge/Makefile deleted file mode 100644 index a793eddc6..000000000 --- a/luci-theme-edge/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2008-2019 GaryPang -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=Edge Theme -LUCI_DEPENDS:=+curl - -PKG_LICENSE:=Apache-2.0 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-theme-edge/README.md b/luci-theme-edge/README.md deleted file mode 100644 index 90a878007..000000000 --- a/luci-theme-edge/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# luci-theme-edge - -[1]: https://img.shields.io/badge/license-MIT-brightgreen.svg -[2]: /LICENSE -[3]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg -[4]: https://github.com/https://github.com/kiddin9/luci-theme-edge/pulls -[5]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg -[6]: https://github.com/https://github.com/kiddin9/luci-theme-edge/issues/new -[7]: https://img.shields.io/badge/release-v2.1-blue.svg? -[10]: https://img.shields.io/badge/Contact-telegram-blue -[11]: https://t.me/openwrt_nginx -[![license][1]][2] -[![PRs Welcome][3]][4] -[![Issue Welcome][5]][6] -[![Contact Me][10]][11] - -Telegram - -A new Luci theme for LEDE/OpenWRT -Edge is a clean HTML5 theme for LuCI. It is based on luci-theme-argon Template - -Master branch adapt to official mainline snapshot. -Luci 18.06: https://github.com/kiddin9/luci-theme-edge/tree/18.06 - -## Thanks to -luci-theme-argon: https://github.com/jerrykuku/luci-theme-argon - -![](/Screenshots/1.png) -![](/Screenshots/2.png) -![](/Screenshots/3.png) -![](/Screenshots/4.png) -![](/Screenshots/5.png) -
-
-
- diff --git a/luci-theme-edge/htdocs/luci-static/edge/background/1.jpg b/luci-theme-edge/htdocs/luci-static/edge/background/1.jpg deleted file mode 100644 index 5f7ce31545229234dc76adf749653c398be68ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27946 zcmb@t2Ut^0(=dE!QUvJ;f=Gu%q=k~uyCj5`5Q+lQ14u7YL%Xq=o1AlY&(7@3?(FWIIkP9fU;lmwa3M_L zrT`rs9biWL0lydMMc_t87pzfMrf{SQ4FLf3?EW4BVf0)85D*w1iaKj3=HPfvjCls2 z1B3tu00h9?Ji>wvtgVs2{|aAT(x_=LapsWM|4Q~hBiKB>!aQiG1KR205gZy00CY~Y z{L#qp;KRHREzjqE@lQVXFds^5Agw&-FpvE!U;T&Xul$2QG`1)s8qE+buaEt=y!*f9 z|CUQ50T?_~4wL`45bhO4Yd-+M9RT1^r+;z(m#+R*#vnjz0)#de)&D9BsssS&9<4m* zUuEva0MM2U0D^D+RVGyq0Gvqx&`R})2)*=|4B!MUrO*v9crf8uE*|~DrN?h0tSY_* z%25&2!kIGJL^^-E7#zct-c%BM+xO{}iSAXU-@kuP14#fq0|Nsi10xd?yPVPR%w zVc}q9qy0E|*^jZ)4qk3PZcf@MD#*_-C@OhU^ME8Ho;CC0m%|buQ z2xXv?0O+~t7`W+v_W&npilEKb!}A}YNn$+0%)-R_`whVISNSizQiDmjrmJT0z3N6* z_Y<}&(m^WoVoAL0MY3v;VDyNuXE74?64 z$``LAxNfX&+w4c;u%!snNAP3}%pj`)90CFdC9)3t5~Hg?0vAEWN|`1?OUhi^&m>?o zO9WGxG$lm}n-$%s@kaXLy>7>o4DRLhN33($`6&9JMB^Sd2?6&)m6m+#raW;ZHm7`$ zr&m&bek9sceyiWnE0-`&f?7Y20V7*w~;GL0Bc6Z32q#ACSA|V5d-io45MOeNWHy9Oob~3|MT!!61 zjqXgBV-rtWhJ=KTL@^rrXdul7>|%q1jL3?-yr_|4-0QGhz>8lJS=Y9VUK#fIf|+jg zIC{&zDycVdCJE@x!8h}r!}nOaQ_YN#5?-JYTVqDh#ha#%7V=dv^P8R?X)7WvJuA`g zYFT<^i#-agK9#k#-zj4v!v$d3$YT1)+x_XDaz%BH zd2Fc6{!aNF_GZVi|8Ro%__ez~A$gn73Fz{flCplamXEummSG8>oqH~AzI5fQRJ6HAyg4JnAsl-Yg4#O}kl^35VJ($W;R9e)ZIfH<^C*zIf zGgq{$iz%uFGO#6{_Hrt8B)WZzFk;pG(Ia5)(sTD3Wd@V3+nvK^GnF-AesFz#Ni~Sd z4!;Lj!Y)(}!fuwiY}PBItjJz%LyR)PQiYcCdN1fY9jxnKXi=E(x4XrU@(28bq?RfY z#GdmYE9e1PqS~NWSDF>H2#)mbmhah;l%uLahr<@?umw@w4yHDlp6PvsX;j7L58?N4 z83h>^4N#04toL%pBz+ALfsCW(j_$tP5GAZ>v>{KLv}y36P6f3gsHrXBJW2kjRXgznv2p1 zt~6!di4u~B*bv+x5Nes8dJsFcvEhbK(Nb247oC~-^Z2Avv=N#mfdiQ~AW|eqX z>WVUyRq%^~2oKP(@hvpI*OWGUxSEvuv>}9@?8aNXqk`)9{Cw*=5G|>mkS#(N)v}lSrrsvazF}O0$*WV$*k*jpP~@t(1N|@LXJC2M44zT zesTBsq2pR(A%cv2mNtV7xj~I@a6{QtXzovcDqk#Lg- zr}y&7x1fuf90zSmR`4Dp+YWAd6d?-xN}1$G<>v8#Ob?I1c_su)h4O{yt(dG- zOI!}%x|giR=Ew#gO{uJuKv6WT^U%3MJ_Qb4#YL536zG8brnm7*mUW}UJj-Gag}tf& z2e+1gxt-Wa<%-@+8K+vftfaLQ(y_?)j0Ca^f)K-}`-LLF%4i|Rg?c}4dVDIMyDC8OY zvb#)}wdb6QtZc*6_^7%4S+5fMG{1I<7a^BAoXJhia{QT+T45yYtLgd-@a16h z+YuxI$YHw>V>XnjpQq!Htr6U_rLG7qWR$sVQ-ErUKC79#Bs4EH5~YnTlZH^UuDY}# zI|3cZ@%&N_bz*SbQk%*I!b{Z%=V?4d$!9Zy=F<#F-jPtxMwHNCakq$(w9pa^DP$V; zZo3OYk*{6vT}!phndTDD46w~)oP3=G!f?TA31sWM%tR(3jukMgOt7g6ZxR9x%P+X7 zts=FO?jW1RTTB#MA@ZikzVc28PnvE{muWB?^J4?}#W|iCBUGaiB$WbGu`-v_P_8mz z(45IeNWZ0sBqTrLOCSnT2<6l=X=o2NTN``I#o@STYtJW&Nu3;TZl;-FVoMl{O=wQC z)N(odJBW|t3gJ35n&RM|mya7Z?#h(mTgkYsEUD{1K@p^iES9cQ#z0dyhS>#60?y-E zgmc{8i={AhJWJB~?ba>9xwyLI4Ai0qH;*T>N60cP*~Jlwg?ZK}ISR=+&1|+%<#ju1 z5wjW+0mI$x<$}qo9M#Xo${D3?%wg>B*=s!E?Croq^3B88 zVq%EUS?w@m-{Hbnn*D>I8*0H*s8y72MIDI5&gw~Wtl`4*%Ya#oC%ZEfjE5v-q>-J( zs1aX?_VRbLOqIGNWB2Ak<#Y-mGwyynxxPe@gA!O?!>&JWN6FzW^ z7$Ptt96V>dcTmmw&^)30MEfLTMeIEr^PE;Q zNy5j6c^McQD4OMzSohyb=CJKNuFN1Io`bw~n>2*ADF~E=nHmj-rrvNX(=9p^lIbpi z6(;&u=^_{P8sb|^g-mYP99t;jsPvli9%DPn<|WR>$Y$KaBO`#(Adu2P*Fa&JpyFXH zr<@^G-rLOsEkw8riVAz*vP>yl&z&&M^X#ZOl2}bPz&T3T%O%kl9_vS#*$9x}YJ`eF_WTe4!8cFTTIXw)Hse<6{o z3FJwI*@WX8bKsTeYEM#E*iB<_Z3&!Ri1=-{XX_xo1?@02>Z$@T`tOXZ2 ztxPVBs~S5GE7cqeu;8$OpEkB_1JUE*$n@gd>F!DSi?}c;p=DCf14-#4ejZ{YZU!UU zgs@VlWo02R&N4BILJ(QuwRJ{y*TS?f0}nWm&2pQrF8B1Xvbi;gg-OZMCqz+xjJG5# z%HvG0`=EsE8JTFiP;Chj4;QCuu$jJ-@ zRV#R)@TiIy6I&=>UedL}6Pa_dd)x!f$te+d?VV(pr+m|MA+HphJ(WncdrTFXCH^vr zbDj-}Hl{vDbL&{m9P>GH3PM{la^?FIRv@stmnxDPu&|s(aby?>r<6=j2&01gvmnzQH^dqJuc~L2>b^UGs@_zC$VBA3u@~h-&&!r~^Z?(QR zv1m7b18HE@PnQ^#^YzAwR|}CgPDviTMaLZp?ZF;B4zuGIPd2?M3$u*DW)5M`Dwxwl z(|?}Q`JzZA!eBqOU*c!-&U?RR9mRkuY{yCLW*vpV9s1Ky4;AD7p$Y0K^)EWVQd9RQ zw#ApgtTsaBQ68<I!o9(L-+ngnOr>d9sQ?7$^u5+!*Xu6*$_XDYz zc6Nq(*@G6;Lk7HH+P?vhud&zS zveB_WpKr)3UA074+?ae5o-oQdh8py-v1gFVA?F`^o`cVaJ_?k&ee<$W|M-R4@1jo* zuJ$ZD4facl^pi4?>q57K(S)V^C1+juk2mXM>t#0&E~LH@Juh;1H6nsP(Eq4k`lKN! z%T!I318Nf%3@Z>b!#Ne-&*ycFR&1#;xqBgb|Ho!WyYzdZ+x2pHh%UA}X_9gTHcH#@ zQ)Gjl@bYiqycg%JmRHhGnca@+7aSQ0_w7jcW;E2FTbJAi8&tO7P%q4o;t)B=#H_Gk zX636oZS-!Yp#*ee(kA){{bTf8?bRmT|qo0XfMetjhxCOI= zpWPD!e5(7{!>XmoTnoOPVQMg#BMGIbyCbrbxpVqy-{aHWKVZg1?IrtXQ(rtySaihg z+z$QuIq1jLJ;}bGtP^V&45Q|h8NRw%M#tquAokor(&2CD^V+M~%G=w;_-50REo~VR z18qRYb?HC#f>(&q_~f_izX4nOH4iG9cQ>*ursdheg|gmpmDMkitp^KYnQ8^Sy3y6gdhC2D-`8jxOYKKT~mEWJ|?;z=GMi^h1Xu}LM+al~b}yCvkA`A}V+PEwCuJ++zjEBg5AWzMd+^LuCC&kGI7 zS80Ez#(vV?aPgVlQt%orvbb8Df=x* zKP6!?$sYS5IL<2N(hfP6n7606@JrWH0PgNpsL`lXbU{`DZLu3`wr@x3JM_D$`b?I7RRX-NI%K6VxA?s`w99kFgVHS5&`jZzYq>T%LRHt;5*IVG7?T_RPRXPS8{^fc@qZ!S1LgcmH07SOzWch^sW zi%xK7XU8oo=VzPjnfnnynStvKJVA~XF7=vTv;`y$_V&`Ru^lWfMtHl+LetZ2z^=tZ z*;vh{%y6{45XLqIU}7-i>Q$jHF@uBj#dx?7(rj>6ZdRTOaU>E^oR%-tCFAYwTI{&= ziEb8fK>OPb)~GW8WE7yRI#Di-tV2tdGXW$3-(L#nWlxgpE`YmbsU^h9OJLHSc zMv;wC_?Uk{qq`SFD3g+u8&a&;EKCK>*AGbH(&*AHQ8_8bJ%}QNs|p2*sxGqOhKLSZ zHZ*13syFfnU2|3KWFQNsh>@hsdZbbztkZ(VB&BNO-e8~@EMo&3P%4OCOm&^YSnODyTpD(tO6&)`dX|Crk^A}RE@j^XT_@2@VK&Z!xq6| z`4HI9kenD`$jtkuY& zAuQomkwn-CV+GQyq-fAabbR8hS&R=$1Bj!e{G<|FXsLeukrXzJnwV4#Dm@o4G;^$D zQo;9zun@+JdQAkqn4oEcvU2Ikr>7$$0-VpA#VGSfx}Ojh_GLG|QIQ}8N8;&=ljP^) zCA_4Gp^Sz_nU&|zQl`NLj@VL9ETK1gya*FUTmTW(g@?)_lxtS;Rm$72cbqu0HOL z2Gt4Xyq@VQMsow{UZ$bN5MH5sHR8Omp#ca_g|S2!MGjp6<0W9TxSqt5Yo;*B0*(n` z5C7_McO&i+KWlamU*t$g2`Yz_6=uc>9Jr*sKpEu`880U(t)gOD__Na1)FZUgL%z~Zh|yT8 zO2pcWpxu;4sQT~<-f;<-t*@z=%)zKW6Q-9z>rbZ3h&iqh(X4E4FX~2QVQFY_2qDYe z%Zp$6_%b1w*F8= zRU>q&hqPb2L1S7B}( z6%6%U@}z!Rt0g2nOLC2?4K3tba8mgyQ<(z=C|o{oMuKUm{PtidRZ~LQ8k_o*Is76i zt#mxSNOQN1sPqOdTa##Ac`kJ3RxzHJpydV@v)-xp!Wo0C)jfE5i&ZM!Ls2_LnaCCy zC9u0vIy(EQ%=E+X_n3OLMofTd^pI)^TL3SQZ6co`TGiNOf}|jB%<~+tpSkSyy1Caw zET8t8p2ogC0vSQ#Mo3sZf?D>L^g^lLc-qf7;7)^Ov?0H$j8uiDG*7bxs-}rU0U_;0 z02z+B@_DIz8uB1=O%y*j8CsF@O3_~RX%>?R8L3|SI`LRe|5;;31U{N{$&4I9_>LzIjBj0Ajp|&v&P2Hzgw=BNkZsI{E1BWfS=U2*RC}dKhRw46+}_ z+5aQZei&zG{43CYxKjjdFjnIeYElyFZHxE~{6TFNuQz62VCu<_MGMcp*qiK^1<^KN z^m`eaONB5NuRnIQg>R7Wbu_5OL`;fF57Ka>N}#3==D^bMk8Sqn_#^BiNY1aE#aN{P zz(?4hW&{WQ$tNG4d0~g2!|!&qHSG1X6iVs?3<2?dMorD73Y5ULjQWU68*85t>rJdO zwCxW~x@+<$6Kq!tFxiL*%h`wZ4dF3+13sWI;Fs*&MAvz8{5_VOXtZQk2(BypF9!MmytN{F32G4IvrSq(LC8^ zXIDT|X8?w@w`uriyCYobs7FP?bgjk17>s5;`Qg~=l{gj@2Mu?O;J|O-I*U=Bu5otO z5pEF8ugQPLB`tP{N&%(=Q_i1h^B~t^Xag{JKPFg+QI%E91DCU^BpfhG3kq30Y_*A~ zYKtIEPbB03^wR9S)fs|arEW%nbsgatbVuc#*$)>ZIvLIAeau`_)H!Zk3+J;5m1}28 zI%{6qttUU>Ndj<8#!aedTLykURIPtS>!;}$4a;ZGP3z*Tlm@?@|`(?YCJEGzSxnJB5Rd|J$u~G zle1+OZ5H_17Xs%yt}rZeA}$}dJON?^Sm5_0NcUb_PxpQQv~|@!Fy=y$!z?)hV|i=+ zv+%c-y_njz5qdetdca z_Ufskr36TyML#8n1F%*zVdnZ3JAV`V>dM!RJGS5M#&8a@g+0 z^^IM%1z&M`UPDHJBOZL@b(Ga@<&k^eobA`1x_#HW6?3s!uS!Q_;x~{I_Vex2i%U;_ z{5&3OBRm0$lO__|l?Y%B@j5(5lF;{i9z^ZLDLxpHvAi_wp* zzpT>@q~d{e+InVVt+-a}PdDMwW`c3HA4Gxl(|yGli%OV~fQNth2fB`$wYp~VZ0x;s zLqjGBMu4@w+zlxwEI6xKYk3GBOMSF`F~WRV*_#4@H^ zFyiO|!DqaIw_IOij-{+Vl#jujC%0tL=NMPuQUE1aPK4lum%1if$EE2=FAdvo3(~5% zBct@fboW$d)g{PvH?lJ7J;1%QFJhS>lJVAiMuuz_H*T~}(@%TYYI@XKI8O-Ie@h2} znPDZsxG;UGB}u*K(+!es@9VXjtpb#9Lu}OMgfhXGP7W|P+|i{+T4Pms%b?t zwIctR+QUix7yPrQ`DaU$;n31cIhs#wp{{sDBFskHU-p!1WjtMZXbuZ1 z2`7!Lu0-K%hp?8Ki!Wh~f}_N;Ud$!wv#GM*I!q$@bM%%sxM5DC0Ds3<>EBXxjqe(oh&(cDx)A772HQwIRD=<)6dKNfSd2ee104$_fcyjR7 z2yZ7go+8H#fiRwy5fAMx==c2>>;ZM|o{jo&20Te3%#&AH$+(Vh2|^h1bc4Bxw)Qe` z(I1INrJKQ#)i~=4!{M$X)36dMG&zxaV?E#oy(@j_fW8#BL=sNChg2d7wG@$;k%jg_ z9rl|n;!{&tMHCOqa(Nd7N@Z44q`6|G8+`;-oZ{c>m*j#BcU|(o=Ypm38E+xP2;1ptX?+uH z(&H9c=M51!eNr82{BxPnx6k-s8EIo2(lEFMx*BtLOxJwJ#U!)Y-q`l7fB6ltZCX`dUI|*g zDiKpywSDZ=;?}j>2iYk$A5@Ag9h=-!P5D!h5rV$4-o!Ycem9Axjz7J z!k@z@@3B@es>-U6oPN~a_qC8qU%sTXPc>h>q4xay4rR%!tV(_Q$OoigQp%_pyw38i zUTdYh(g<`WdV#jRy7YaETX|Yo->IVxIKidbLoyfPV6(<2sFYh9iovl{8T1K>0N~Ds zaOz)D2chu&&q4Z@!3Y^_3*TwrM4&#>HJ&fApa)l!hV+$|>dFVpc(hEMR4tOoNl4>o zeU>yX4d+&xHtxz-mP5nxrW)#xj509NGnQb)aK)^~=5RSQSSG|hJ?(g4y_``-O%A;j z9fG!%Ua%ze47tL=TSAqEa2IEMeqjPLbfuH76aF zFb}k`Fm#8rvS+&SG{AX41G&VDY9)>fla^tkMbkXxtb;kq$V7Zk%ZNAD5Rzt)W5At( zGDR(6Vf$yCC+p!eTjRVU{nhvyCN6Wwx?DTsXSGn&cCSo1QLhpW=I;r(HxHy3a&x8M z5E(3SsN}bU921w2)OKR@{`Lglk1#p63SGDzpJF`JCFvDL^fip?yuX4$2=Xx=ju)4%!A+`yq}=i=cNQ*vd}w+=3U_V-sSboBJUf%{XxfqBI?@1D3^GlzAU1hUd@H)rXI>P3%C`LE5P{8cpzrcAkED+)Z%pNfz@j`n zmPX#+K`#bAf7)kr(R_UT%N5E^FOd2BTlJJHLz*P;kA+23CzpKHS7#j&b4-scTdud; zH)}0UY!{HX@feF4huMka!pH|?8|a-IXBMWP)extIri3QSq7kU?=KL{;`l7FAjM|P1 zJKagXZGK7X?O^{w=31Uzkuny@kahxV6CL)il_oK_Y=Xe)}xi%+1D z{P4#DD@X7zOrD48$zD2Gi*35Ksu%h0L;Y;NWt)4CRRg4^{(HMnUfmA9uC{9XlHboG zm{li-PtK7oSf{nU=T(je_cMM2Ch1NDo5ObBx7RFlL=;EqNt#@!8+NhK*zj~|hgoLn z>MAHG(9Xj{S6BP85^!YpiNWi5K!-tp5>Tairuwwc)-Zu@pT_#hmrL;X=U za{aq{_S2P(AIKedGRTd85!F}H@_)k`E$wDk`gb1xp#Cl0pb4e5=>Gs?Gy*pd+RA}) z0dx#>jLb(E8JYifiD(~zF^GvvD03;P7}&Tb@JQ;rh2$DqhgR@Hf}2oicU0f9vx{L!IM6k}$CO&Y!F3Hz1KV6yc5W$zx{Ox$V!|d$;*7RM78zCZ=j1G@x&;;=}oXmtwcaq&CiM#I&I6) zN?yyxJUTX2y}BO6ly1k`=h>+}+w(*zCKds~P6Z`Gpf~qd(~)232RD%52$in5K@ucQ zf=d%;KcB93p}GC3weh_Rd4vA*n&kWH=Tdt&642fh{R!2Zm8&w$d@pCMW@@1W5FcDT z_u!R6hWZYcoP;N3Un<$TGMG{B{Z6gVLu+zFECU23qnkMLf^8Z#E0KBcSjEIfna_MF;Y>Oq zHt%ZuiPhkt{8tRw+s5*5FyXVI9T)iX%C~Pj&$DS_JNs1lt`5}G=C(W+?R#1}dL~AC z`hVgpblhBGO5)1;Hm(NNZXpR3xt&d8oAbf(|2!P@#J5w&mDi%<9QKbd-Bm=7e<2nZ z7A`9WeAIp_chhM6pmQ~5P9Zh5c$qWelk&Iq55(fsF{JRoJQNS<2tQ2-_6H&)aPnb z(^D&cbba~yQipe7?#JlnUeofo_3?e?inZvN)!2>?C36$qamM>?r0+~$m>WLo314nI zKfXz+3D8rBig6KjDX`MGXz^T>GJcTpNn6_`VSc&r`DeuT{?Sx&^wBq$t-L?Ph^8)5 zudK%qMSCb)A1qcYgC05QDR#UyS$(eiE3Zry1w)xRc?JTvC=kH+`B>iTK(hT3fK& z^jMxKt*TqO7No)AIk{`WId`{NH+{7<$mqFf{l?eVyrPSfTW7CV-dKw&3ChyV{ZJG$ zcka2Ug1Fk-7}Dy7X!mP(Q8$e{#igUOl#VZf-5(^)6MqBmeglaCkB_^5LOQF)I0o

$Jm$hsA(DIixPVuKVwD#T?1-t9{rH?ju!kAMIjx7{o&fHZv^{fSo6A6p1dQ5R69 z?d9UQp$)5?)OTuYBQkBA1+h}NZm-u*ewY`Qr3i7RBUHJ!esJ0sy1vCg8`?_?oOwBX z+GFlqHi+HiTfS<^0`HW2D9*MnIT@@s@GEC-8oLdoJkm@0scKW73dzy~Zt-}3JLOR- z)BMF-A!SdyRYv;}q)_i|#oMc=K8F4V4xZw;ET4b=^i%I+)rE-<{@6jiZcbH_!t96D z81t6U?Y<n$l}Iwo>(5G1*B^uci01>iEqSgX|E354?CajwptIT(-Ar_*n*hc=VlK zZp}SsAG3ySqvT=XxM=psy|Vdiw}k~4mYf-_-$2Eg>4WWGjBc#p2MY8dX(JivDL>bK?7zX2aqp5F0q+?^^c%QM^t{J()oqs#t39p>^? zA3NZQY0*_*Vw@j74F0MY8ek{o-{wYeK6qNAp;WT#E&{vLwRb8->pBq&K%cI>_Yc(g zY4en+V0`eth4PdB1^K-1*i%1d&Xr}DK%2?GftD}M7n*lX1b5L{Z&x`@p1-rLg8zW`9~BirjQUVCD`R?tl z^RF20t?QWPrOM-LPw1ZAk#sVZk(&Usi23CO^f+8tJN8l8AY~^)Jw!Mr*yMSa_o~T6 z@I#Hb<-(eW_7)=qjZydGJs$PNrqnULtEf8GX3*)ar!Avdy#gTf5{;Ctvu9wf(!Q%D zHh7Kv$_?ir??OfQk2Bg%&TAo~#llaS4T8o{kBvHS7}ex z)xB-Syqx{wWJSuL6ADin7UmlX=#+ZjWL}ZYhALEj7~ZjJJ~nqfJ$TD8+{tN6FZ2o_ zLtLIJlJ82lXOBxmYYc zZ(}s~>#V-fte#7fO((M}c6C!n_qkv1FC@VO;<=K#{$@mD{lDgTl@2A-(5y8S`DTiu znhBpB4P0uj{-C`^Z|z^u>j=sn$CD;PVuUO4q!%0 zU;u%lvB8tN4h1>W|A#o*6#4s}HlhBfHvWVDr$K+H57|8wx)Xm`MALUa(?2{v9B2Ex-UC#j{$IUSXr#>>1%$IJ4Wnob0DmyE0Bx;HzX50i z{dZ*=4Xqh}q}-sXn~yYrK;76a2k2YHK$ig225@u~0RHOvf3$?gmDXMwF}|JFrujc= z5mqoC1?b%L4*yC8(1j-}m{-#pARgRdh$p>d0@3cwTWO+cy{=X`u1^|O;OlrsqEX}= zeHl*+WGLj2zUUv;L^#KDS|2}}+_lPFeY}^3`Uirl>EfAl_C@3v;+y~m=3#a~9{`lv zROy(j*_Ea)Wh$QRdS6R(f#tYqfe{8~#((@@0N|!)WTL(D9pT~;seHlVS9HZ{$SRuCBu{wLd ztFpE`BKb$`5DB2~LS(y1D%{p-qE`D=K`}qX9T1s9k!hL@=Zmqe0j*We!pWX@a*=M z(u&u;j#t66{1e=Z7usuF-QLY|9&NC~Ckj7>sGEJ9npoZ4zoL+BBw#O^AaD*}ZX`W@ zY4+~LH(weDy;eDd??!?*W;P-NXCH>vx6hEt8_v^h3hJlQw{&HnN8LTXs2!BmVbt7V z-umfB+}pMf;hHCfZ__*o#uKNqF6*lTYJhH|04x<~1OO3z4u+3}cmP=N0hr=}uLV%z zC=>wv0OnU5=Cr?!9ZnItwPRwmsDO> z>gD<9SG(E2BK5<}B;5o+lY6M1%L+qZ;I}i*n#gL!9Q2(lAr9Y7`LtG|dy4DU#mb39 z??-Wx8;+8)oa274yD87#iWMom0h|Az`M>>+7eP0L)?Aj$X4^dC3@oH?Dvt_A+!FI) zcRgy8_u6b)W@|svGBekbnbh%Fxh(B|pMzaobAi#(%_r1^HAi#VNx|lnW`_~ooGs?t zV771fR#z@=o%9$AuNv6R&iNFPbv?vpiA@GMR(aXt+3xlgozF6P?dR`%$(p^1!3qjh zMGD+p+%m?&+c6k*^|3%{G@9e(>`Y&l2j;xU6({HSTJ@h)Rr+3CY#Wjs%`)|QTrs?b zQ5{dewHz$TfaM&vH8qad^38S_!^Rp`-ns5*rR5ovYEO)+6Q76_rG%iZ*td12&Ax+Y z3hh*dYq|r}FQnPNn7mCq?tJI_wFIh# z^|pV0b-86tz#Nx3X<|Jk9Iq9WSWx5swJe2gcbt<^QFNs5g%xgXH+l9b&GjCNJ)1G$ zF7rgAI6V3J6LQD-lyfrQLaZ*|S>cHdD-3tWU__#BK7rr9cy7#iwgIxLSSvFJrhm&n%vOYHL<*6cjvCcw+fRXP`FI?Qs_w5%g%iNCx=puc$T1XH}g z$v5GZw|o{mK3B#u>Cu-ZSS^7LNP74>7@{zzE}AViKGoRj2L`3n!5n@xKo}EOuraoM zu9TNMYzutB&UPl*s^9k4?Yf_i7}48x-`UD?8jO$SFJ3v&rWfiuIX>kfAN<-@km(4W z!64tCB;MMUmSF~8!^=e*rskUr@5qcVq;Z?Hc*LMx(`?C~j6!dgo$A0mjia51kv!^(n{ciC<`fJkx z+qVl>M7a+bLr!(~Z7TmN7Ug^tnfMNJBb^S|j^7vbWby%HPduKaTCid~^i zFUC~u817pJ;+(&EN<%ee6tt_|u0E^+``S=9TpBsyb6=z)9n<1%Bu_9DER%q-PwgP* z1=leyXCps(QmwQ~3soPSjj3yqeRRy^?ZC`ssky|M@VdA-u5PPvw4B#2sEazy1a~)UK}Hu)0jE9rA&$ISHCMET2>i!0mE zjJbpX$}NOR%+NYFK~hOYKe3|8HK%;+FB8r{_m>G5z)Wmx^i#4istQe?TJ|}y4$RCm zRr#blKH^$}&ijZGS%)tI#HR()Q4N?>ua+RlhRaFBu(FTVI&lBq|FgETmI&2g&(g;6f*(;>>%%)G7T1SmUYF3~0So?2psk zw?1bGTpJ3~lU8n1*{+V04!C$SPvc6>OI^vXt@n(6gQM^2z*R46UeIE$O&Hs|%?^~9 zO7SWlNWFBR6bw;#i)yZ;kdZ#x*Sv)=NWWEyvvi zH6WtDUbR+x2h8eOK^8yZNaW0>kH^}^-}jwcvtJ{gb=$6gZkE0!ATq)Rm0f zoORk*1Mgqv7}wZ@*&ol@lx*Cx4RLwrse?WzPv2S1Xq97N`Sl>uqz4xy_rs24S#!0jCoZ-|;MhOGts4-XDv5f z3QO5uw)O$MFnnz1*&)8aFD65LPMrZ>?7p)>+Zmc{k@pxqqJpi4;U#%$61iq1R9zT~ z2u4n(X2kh^uU#%H`6r2?XAw*N@=^4Q&5ttLyajR5K3StpRXQf%@9-)eKnt#lD=Qh; z&?2k3`V~!`oAX=N{}ox~(mwV%?c1l8nMKY6fsw~?1!3|nrLVf9s4CcQZ0DkOR5Mj* zUQrm*ok``fgvj@7%BD;0eq+r_<*fd;bQAiMC+eGW->MhUQF}xsA`9|vZ}Ch^ueW8h zm5_W(57p7zQ3^K|b?I`mS%}P>$g#ZPt?9S~owYwtvgOdSCWfEF{~ZC39+F zM?O`ws5ojszKlUuw6VZnswnUD`)0c!D-j}R{1kK6R!g7OQJ5$iF zQIDeY`mzP3ienyGahV|>dBa!NLIzURPeP+wqp%w7?{ww_B4yXqr-Rg8v}L;kh$2=T z#Gq?^rM&}-+9S=BNg|}z3WdFavmki2M&YcE3lWPYbW=9BBq_1S)Xn!ap0AI`eAltm zJ@Y7FagpF(ya*A&W?$RsofFlOn%?kCJPGL(ft>CZn_mdI9<{kI?>Jjl{+)NIjD2}; z!76Jy==!^YkZ=1({d=f75k!d8)@u4<56-_ZaRdUnQhn{23wDgE62trQOxf|Z&l=Ab zre9?iM5%vMe-j<>$eRKk3f?MC_sYBO-_n;zIkPBa(c(Rz64H{c$jlm>fdCAwTQxJS_F3B3&Sl#i&)fULW~$u+eODHDUa-5 zOiUI1Jn>c~7D5R~-<(>U&l_4?jtC&?TwvdhRf#QyBG-qS2c$MV*C;nyn5}rL7ki_< z2bwSEoDa&~ZKjrg4ajDu#GYdAj(!wPRJ3zx>5YD3OuS7MRTR~}G$$)8wkWkIoh@J^ z-yDKX>A^2_dE7lE`H)vsIB4wc$>rUa;**Z)%Rkv$9%{$72DCaZ2Bl0(MKwneqNu{0 zqCukawZi@cPpYtgS$cLNX|;QZs6HiL>RPs_ zw%1o(x>9ei`FG*XGO)&PBC*X;Q9<$4_>i{F_3rHJJsZDjz@!#cCH=VUdqN28)2&q)(G6Q`b>c@(SSwdh5N zCU`DHJQ{&`5?nlowq(gxqRo%ZdzEK5=Q5{<=ll9%tcW44Q`ckF&j&2Ngiiavjr0E+ zwG*%~twZHl-bx%;T)D}kJsm()-)nVU+!b7hykrTBYNfga3Dc~$V!PM!v@~w9=lz*t zshc;mb+-P$9K;P1Tf$kQTMn zl9o1VqI99lpomJUVkbfDT}U5^h^@6H1hN00>2Ln|h`sg4{P0%n!gl19T; z1UQj;YT}&_4RdYGj;5Ih+!1B+r_5<5?-^c)J0m6-}?Tt3;nxD}TRy!Ow97+$#e#?WnAbJ*g*B%gyU( zda!;kPW7Ukt;ukE>^x4wAGal%_m9sLB;v440xRST;OO5jhkFHfsT44uX&4p*q^4H- zjmLF}jU}}#q777KGT4{I{9fh82+ssClQYD2Z5kV!L74H!G5YA(C}J~kR05~@dnP!~ zVCd@D7KBbva&qcm6C0N~Zi^1FVb+B)7NDVxk+jwlu5n>hU2jDYgQPcJQlB~2orvE= zZ?nBgXudy@rqN`yhsWXtB(~5T3B2v@8cmZ{3;}@xpE)9%N-VYuZ)NaE7s`9VX|*KppURq#Y?X;hHr4d6r>j9P?5(Wm(oLf+n;sA}nig zVl15i4AI+l#u^yjmI?O9i2#-X%FN!hfN1uv#cZ0&fGlOkpODn(lBr2L3L`0rtyo7m zP}P!e0ry-L!dV35d_XpN$5?;O#-k6=6DX{IAOmaeNjs^`#`du9-0qiTUuqUVtigtcx+ny2KelhQpC_vW}Iq%Q& zLBIknKY!4OvJO_7LM7%#eZZG%+wQ?oKQ* zvn2406G+Y|p-81>(Af*eg5f4-aKqew2C$ur5#bmTLQy4Di?71%&RU`at*K}NK$2qv zoTR3W62Ad&)kKo+p&PUNEWbMT1N$zyr1@1&h_D=k4k@#I(3ybs>dvnRu#YP)ISl~9 z3jPj15$7JkveJ(~!OXWqgrIWM0=tvxE)1D55;aa>HEw7RP>A%MWy{a(VQmM^nv23( z05@6J9)x2FwBXG077@1IC6l;dV;IXBGt8kk8qJGlvlwj>rzyX|%G~=+T8ucn928TPZD(*4m0_TjUx);VEPkM#HI~UN$5n2V!7G)t#NTHE z3Rs{H0T;3S4d-{)sB!U!v;Hty7SqpJ0*T3q=11nSG_!ra0D*+6hbtw=Yt{8JlbPk4 z0pWv#S*MY_$=TR2mbWT14hi_fQw~anugaB(GEELXScSno5Ki;d>+x)0U{ikLDrF&l z{`YzphIoRI|=_Jg2grm16$R1U0@4-#?q{^7IY5*Mk;nd1q8Ymn~=MkedO|`P1 zNrJiGEZ9=StB{PT;HX1_>;dF{7dGI(Vg*n6v$A~oWp_TNPV8#u0xFW5TaGZ1)3d0tdahvIMo%p!_%)M?=u(sKqOJj+i0Vb z)4-D@aX#&9m^Z^$YSgn}=o)JlpD04)O>FPMUl7s7%zzx((ju&D!|Ul|s0`gV&gAL-$5Ni#9Wzm7|6PdNm5IbtSdcz44T ze00NXAdclrSx&zT{K>{9Fc#9?%609UX4= zvKR=@kTH0Dafawo| z_gGwm;MO2By#|Vj%4iyP(51ptRD96$BMnEN+A0n&#&5=zV9TK}e1K&J=Z;CS9js1k z&$#)%Q-dReOVnTN?w^*5U8)89eMT3rde`VLP0`XN^AFV3jft)FCh+?<6e{Z)zy^2) zNvUVXs?`)cO)?&^t~RW^(*I1>UxOUq&?-yXSvkD?o($zK!b?}pK~u}~Uz(OmiVuTZ zim;>G@nShX#jtC?ACoOd^3>qTGehc>UoU$N(`L4Y$m?G!~)#pkD; zBo#e#Q!>&?%AS6PWujRbk>-<81Yp4hnPaJmT&6Yj9R37CevW zxi$72ZEQ&Q8eM}hzj`uyq7SWpZhx0W?mj@Wu{HU)kYuVn=UOPPPwKd~dMbj~5Yn0o zs+F0u&FP9g_g8mqYAwURb$9I6?%gCy@3q=@K&vtG{&HcI?4~`wdkvzWVfSjbI_I*g z*JnMV+Zx2O{@67{vpsium3KZ89+e$h)j97A(NU03amfpgxxwJu^6{bd(dBr{#K49G zW}Yg`h+xB?7%TS!9Xr6(a#XSYIqa+6K-)jW}j(6DGF^nC#j!ZFB}VK(MI%*#3^?-fb{Ef5ILr z)6cl+?OKTsp4}LJ-2LUqq+UC3?p-6|l|YP@r;=xDWPVY*(WwXb5Ev~yoelpKi4`fm z(4Li5PgU=`YY>NByC%q+_ifiYN{N8sUIzbkMJPAty6XM~Dt4WI8aF8iELILlR#mDd zlU>>pTgfQ`RVr7%RdE*!IvXI@8VmR$>lt1(%)1OLmL47n5c))Y^V-h^AuV3Iy~%0YGf7utuWtvGAVE3kAV^sMuthj2`RaB0W&Y3_P+Kb96l^z)LARz zSXj@G)oIiWA0oIotpz3lpGgT0An1CbEYHD6W#4b|5|#QG^LmNisslq4#y71PU*n>2 z2FL18B->vdoWYTH@OJ++YpoFKv7icUZCK`KbEZsoo>n*CjYNpMux_HI|$XEE^=tzz*-U4VZi7eybECW8M|^Q9Z0b$t?=B(Uvm{ zSe0c|<{>sJN`c>t&x=6WvXHu@O^rD8&F(}sCu+SQq_)naU~;=ZH<+fV;GYT*u}U%G z4QZ{FM1bHWRLuce;0&*mD}sSY%)8MhlS*hkDqA!A;OMoQZ^7fMjvEw(*?%OVH!#B2 zAROGZ{i@@l!PF=6(O*vIEZD0uAy@T2-`H~&>Lpu)*qbxGw=LS=eK9iC2@u?Q7^?JA z!kBmWWDnd!<9>SOZo-bsfwdjQ=wzzq-J)9WeP}}}T%_|C&ZnXv^Ra}Y2*X%0_#bTG zn~9*xrjFUw`-oR@76^BGFiALRv~+N3)gJkx!AV$wYFmR?zi;$b<0q2EmJQnZhh%mk zD8UHEvIgtA9T}<)ynE@#^82>I9<>(XwJM+-%{#UPqUvHe;^=qA#N&&rH zuI3%!MASWQ$0OY+|AU%wy#nxEpx3s=p7oNy@BMx?f^|3nIe(`;w2nB?vi!C5yA(Q# z%<5nDMt(6mq_%=$hQ9(N;g!2D4lJ;;;;JMOh1bdX-s8vKerTJjRIaNLrX(Igq<)(6 z9}MQsJ4(E}%L__O61_fwyQ zJHkt8L-=xGdelxTV@eLme~i!IwV7!6c$9i|Ntc6=vOBJgt1D%UC4yh!@Rvrh;C$I3 zalk|ogxt4r(7qvgD=9l!DuB`k6m|+8tU=|R69zHMc}*pVJv_>7Tm_^p zUY{XLys@%6;5!!*a>_lM6>dms(Rpe~BEbBtOUEN?e!9K9T` z>f_`TVDu+{f@&191wL6XP;I#*;f8>La{6h>VOJv zv>_v}@=E;MtxDQ<`L<>S`?u1NSkL11n~6uUZ)>8~`mG^xyDvuvyx+b1U%+~}kB`r0 zYx{J{#N;Y4C!nvSPi4190`uPVl}w93T%{5w&K-Z*f7XhV;Zv)n<%pqb+@icDOoh^B zOIA0BO|Za?vQh9FRuP%vnkcoTHDqhIF1p^4hSm}O67%sL{Hf3FmWAF=W%y2hmTO}F zEJ?3YWyQFhO&*zGEa2nb27C;w^lT~lHbnL8=Hi%%aL{hd69vS2ehC8?T>yr`163=Z zNnoVXdI(GqyP~=XlQIkM0pO9WAHg{X2dRqz=XlYRlvM(GkmZJ z9D@@JnuF$X!(d7p$b`52;KiY}QhA_-8O&M;nk+%Hj%6&4MUbQ?(Lo=$IvfLBlJqb+ zU^I?N!-s%;f*lMX93;U%OJKWbEdpDEw46qlaN0Q^n<B$y*V`G2|mi2b)IK;L>KPoe;rlvsj!{g;&IkE6HWDWC)R)6bF! zSUOOYR6&wS`!BH=q}ErK0IpJw0AQvSxHuO7e~~OR%6(X8 zGQsW_v&9Xn3>c2VNA~=ea6J=H=LJbnANUbS0K<~Mu~fm#*7MuB0#Ox#Aylt_J3w#{ zh4Yu9`{AS;oM@Dna9G0Gz0Ozkzdpdj)+w;r-`4vb6pA3(3WhLWF5F?^Vc3xY~0RI?QztN+N!hDb~f&P&jmNcOLFX1OLr{+T+8Fjs+061qYD;F8d!j z@Eu3S%X!P}|?*j)su*vYL|d;li>1x&%L#@|N@)CHgB zpb8cE>=oI^2Jsi$_Ty3<)QMj<7C1EBLj2mz#-ULdzGb80ZM$D_Rn8EAJOaH9*+6lU z+IZ_%UZ~WQDeEJ2#Ax9J$wIQ!I9p1&TRPlbMbO{19eM;ddwVCjRt16-ggyBZvHiI=2y_JQr@-l!Ok!^6Tv=(9Un+q%m&rNgV|A zVY4`+TP!BRN(*Cb1UYLE77B0qeGRfwXtBWOB(@IEStNy(X4{RUrFxvG?XLO{SC+$c z=k_j@E}rUiEnHC@sWP!xY`R}EG-KO-8-yh2Z4(o05teB+6yqAbZRyrS{fn)p;iW^b zlSr?vvK$`vvzKN2gp^N>wgd$hB}e-@aT8l~`?PtBxt`+bTGDNFgE-b~xSNwqf{%RT zdd#izJp}1+Gn<*Zh|OkpC!jyu-F9m1KVGdPj*M5dvzsxf5r@ua;lkT+0kd*5WR#AW zleQEVF&$Aj)hlTz2phKECJS#Ek9bdXovJpk8IbMH(vP(Dx62l%@4$bz+7kCLnPjZ* z+HQZnAdHnYKfj2mw`sIUCIzgtlGOA4%dEGxPX=-q+_@ zdWBHtr7g6s3HgMKyD?H%<&$?GCC2R6clhgVUckqhu1jWSN<-JErg}#C@BcnY*Bkq% z_^^kEr-PQemRj~j_PesbU9>d5!%eyB@g5!?QOz2kCk{#<$EXvPf4}>v!wcR~RJ_r^ z0X*kS_hf7_(wE!mpKy&%r!!(|wJ!SXiqD8R`Q=jn+Yg;Sm@N(j2UE&7suuTU5u?mi zSy?IGBkHSa#HC9Ht^SDz4xD_h(X3Ya4_^MCX1>q|qa^h4*>cIq*1*CkEQ7|{%RB+f z%{)Ii=*?}Q{N^yt%;&GSMv2OpM|Tq*n!wdcMc0XH$2rz}gFcL!xM8lv7{N{5HF;8_ zu$G%1Rjj#NQtl#hdI-Hc(uHR7W*m$~Q5Y$*I+>-Fwe8^+bKMkrDUhhhL*= zYaKM|wek*ZaysYOxO-4oCH+u0^;35rSqI(t`&`ve^+r2m@4?lT9-YG(EI5w@l^HF+{kGDP zafGDX+55pGR+l=13_nb#&WvB#*D$p;JI*nI+IhG%ysArwv+xn;>Y!Vb!sx>l=OQGb zG6%BX$b-8|c~zoea#pP)=v!}Kcar)+E#}*~BrQU7_x?3V%l)Q{K4n?8_;)Z}fu4=+ zM={&?Lwb+Pne7Xkk5ELug^vzo``TULu0ak+&Ur~awf_)mjwcGaty>#V$ppXBNxt@9 zgusL9lFL;w?iVF1ia}iWHAv0zjZLJC`h-t{!EyNTD`nxPBMuImk!uj>oXxZGVsrDu zCw3Mq#XCD(qyFQzn>-t-GxU7=?06JDX5Z;%nSI&!xU-4|h0M`5>y;P!O>@UEeOEH< zE?5KM#(v`alfstYdtt8Q#*!$hcXf=?&sw3gb}hq63#-o9uz8#pEams-A@5PoKdMDJ zP%!$PVOYnFjVKMFfr}C4l#B7DF$=$=`Q!vjiPgOR-qIVP<8km1-J3VFRqg)VS28)b zYV*wN$@^u>qSRJY&bnJWG?Qf3cJZfsFH^y#<hGyFA$acd4&hX2Pc9UC-xU zO$Y%B0nQ_jCNj*q{Ps^(|x;12>A%ny4! z&WJJC7!2PYnMZ}$yS0`#wwxm>cM*`n%HB&i6L6}Le@FKD(!cZ1B^hZL`Kz0Opp0u^ zqc%CAt&Tu<%{GW-pqSd28+!;L#`L%<@yH_J?)aZnWD(+7~4Dy{y-Z z?rxIKLSr=bZ2WXO*z6Q;UMDN-$_JUvdl~BmnnUr{Do#fCuq}H=1>(0Mhk|o?O=+h(+1hn=S$vdF|Eo3CK{r_*(~4HBkK6GdmVgQL?; z%!p8~eMr*$Vj$|D#`H_>6XxhpU8g5*lpG_oG@aEH!M5{LUdS7sZl}(RD&xX}hIH7H zWHrp_2X?HzBmc|Sekkoo4ONOM3^Qk+z=CAxXKbL7s;-rtU<%ss>- zwq5Ze(9?-}mx;}0Xtps$&(7uHJo?2+ohK^MxxP|Z^W_(NUv{PIZ)-NPEHte^d&Fpr z68M%IujE~}1`8CU=was;y2K}kXBvS)yzZ%Ntqdi~fyZB8gzD~ko_<$!76sygq=(Wy z&!XH9Q96fdd&6aT-m32Dq(Gab(Hxy&`op64p*{H#W;tfR#dh*#2#>^fxd6q~$b^J2 zZEHUCZlG{xGWI6wTOu;r+hoN|Aga#@8aXqjGv171UlzN)<5KrLid3HjCq;HeJ)4{p zsWwr5t;X?s;;y-X&t;R#ssUc|5oM_? zZ{_iCIFEMuw&vj+z{rC9X={(`UHOfmp!TXdrm`(ata6g4|8)+IV|si(j@vpAPOwbx zEW7Ee7e1sn7vlEC`1E(P!v@c_-o)~A4nJCh>`OlvN?e1)O~&E%ksru$5~iggHax!`Ck`>Jgo0k@ZG! z@v+A*wl);jfrh0G30Jebe%?N@Lp%41*_%DriV+n7-b7g0$j+1n>&mIspEuX8sD2Ok z$T%6(d@v(8|6dr?^LYej-&r#ZX794E^U~>3qPK9tqc}}-OI6VOYzK1b7SKMsZ+QRm zmee4UL6MUN8=1Ak&Woq|Pcb9XYsY>+P0irv_R-I5T&~>%QIoFMDe`eOX7u#E&B*hb zdwG$c7hU_5haDDvt^6%w_o%)HS&gi+X!zzeLN&n%AEY>{elL9_qL|w~<4W7K2I=At zYs7q=4~&G7qh+qS>0a{5AFz@D_WO*@m0ZB&on8MW~}2#d_zzI<)zbgx~_oY`^< z`2ftOWE{Pq_>eM~V3@ob&}%pB%8HnoqKqW3qEC(KLjuHU#=76yG<^;Qn!38Af&P@o zC;<}VjW*%PK?9{^u%b@QH_$_;xDCX;V;#9t|2FMtHhb=2nA1DoG4|zL)2<;+5b2ow zKRDUt+>_wbw^Q8L-@jk8*=pjosnf2aK@Kj^5M^SA@ZB2sh z0_mv2^iX*A(L-O+zg>#`zHfY96H^zKrCIbiCi(O?7$v3W*hB42ggNd5|5+Fmp1`4e Zxb@pP$QWBphnG9 zShqD+iIqtB%vMt@iKPg+v{Y<#`9J5pGt-3c`~LsG-RXVjyyrdVInVQZe$R8xyyxw? z*YlVd#P(o$5EKf9D1`rro(F_G(N9lLUr)E6zP^6{{{0LFPzMe$G#p?yWT-LK(%fpK zrMZR0sId;?Mvb-`V_`v?O1GQn$Y3z6#!YvgHfffF6Jru;gwnr%{{e;rh7TM#e3G?= z^`!sje?6td;C@G&>5^d#M;qKZzv~3fAj|Gq`3V@`i+@$=E^W`_1|NimT%nA z-@wFlxS6?)?Km2JJY({dsne#Mx!=wg6<;X3dae9=#f_V{6g9PX z?*4i2e%+IX#;4Dkp1*k6{O)~gTlD?Eh|H zJN~~$rXE=Dxax=j+7vLJ_F%$=XiJ^jJk{LzQEs8`&4RGmvg)~1qL@*#*M=t6t>?SB zJmng2T#ar@Z{{l$lm{st)RMhZ(lZT<6i<7I{VZ=U-2vNgNN@HKqf-S$WTSTxl=@2H zRw#v!BsbPFt($4a5Xy)WxVhNnX#k%`*{E@kUk7z1YKloX_?>^|4Yh4Rg4ur^aA@pi zPDzh79oH$C)Y}pW#Bnu5-FQHCxN9c59({Q{n?~7e^`2Hwo&WPN5Bkb_Mdgzm%bdLbog3OUv4JsoMiw-m&tky_MfVK^vJa};J8DuLcXd+IJ+<56Rv zAU0cXCXyiyozn)P7Si5yfF{dT6==vPlA9ko3nhI-0M(-g=*sKRhJZ~VmHL2eP!*XT zwW_QD&E=-X4utEIcoMO;s?Q*{9ugDji)llQ*lX)+4+qf1!M#)=fz%Pk;QA9R$xU?k z^|TH6aIi?B@Ye!RlC>Dk0)D#x`ylj^SpG7&-{z?jReb{&|To{FxcKZjX;zM`^&b0y*xe0r^r zsAC7YyY`#iPCb5CKm>d&l)6L-RwjD0kk&}W1i4aWNL8o^{n53D&Z?RA1XTu_;8ru? zgrh2@5?lpTM)FjHJV++ZkBkGg|HsGPhUyQ!{qKtZr6Fyse^4Se8!{byklrXXsYI-W z^&$vjgF5+81bSt&Ro_6v5=R(W07WKjW)o{|W~A=J+8n`}D`6mgu?hW07-TC_9_8-* zSV+BTlAd}PG+;9WprQmB5d=sBO9PzJ5hega$lMfOUyz{!(#jx-5)cRneLoZ)Fr^8& zCY(scA)sBPVdaMlwdt{-Z-Y+-N;U2P+$xv_vHPkDsSACSP{S$%sM&y9 z0{n#pmkXZ9@n*U9XL&OTT(0~>mxy&F1pzz?xLh6K&LZouTuY;yX-h9LiD_NUG-qDE zmkfbNhJghb!QYUpf)bHy0*8}Ov#}oqs>>(Q$AoLh=y2UjDPg`=HH$gQ1o4YXk;t5y zA5yW%2I|q`6YPjc8Q5i2C+bU}5x7J)rPh;XyUKIDUKp}m4H3V}gy0S^1YN8ykXP-Z z$TN|~v_~*OlPa}gw-qAag+IHId+t*x%w4B|o%ajT{wwD`G&sYLLAS7s;C4T?a}Exc*wkmzcEAwfcoP*57~9>o?0uOCeHB#ew6$I4T?CPUVbbZ~gV5Qx{aZRv72^dGi4SRD2fDVCk zFoZEOVZdy!wAxqBg@J%g*vGEDwkGeuT&6_9e=A`DdR3!?BMO@;(5?V)+qZ+{r+hFC z8>M?B2$3awKVMQk7EE1}g((EGGT{Ivwo+paP~rgCaz}At3Vem=3Nz0tty4iXOCBP4 zZni975Ts8E5?Tmf$S286g3brOL%G!`0Lnh_Nj0u~l%|s)luv{#K@A}lf9%uLhCP`Z zeKS8*@zIw@92_+rw@)OM^y-h)qbgb9f7OXZyu1&Mfypr0Qn@5);gD&Azk!huo(5od z#D9<~35bXKK{QH53&#z}UX@0mTtWpZoS>_}A(P<}Wbt0={#M*0bqYo#p@wJ!W+Q6v z{SVk9%v^e#h3Oc{bQBVGO2{JLrXv`#X%Y&H zX*1D)CP61u4P0SxDN}lVG;cgXy{4QZa>$GeNF5Y{V;ACj6v@aUoRWVDf8?@#93;1I zHm@?fW>&A(H$I`G;rZZHK-Cf=q5yQqJ_NWjlA^?J5b~9gP&gn6PbtX&n~wtL*YO$Q z3x)x+1eTYo`FvFavCxqO1{MIiqN~yJ zh5Lf>$^7-(Cqfd3hF{RVx-}Ay$iY=O>yu_E8`X60GEzdsjtE|80)Z8Ul!YCYoKO;o z5D}WKM3SfI4ht#E`yVi$=qdsxH*Xr;#??}L04+)zdCeQ3Kk_{dc9 zss#r`km(bXbTc#q(Y%>dR5_$tI%u?x8q-OV>U*gP4FsdTm!n{q>hWsgx|gZY?5meD z0K)iY%~X$!v80C%M^?jG9!l;2iVzV|3XAjvU(^Ugr6^I2?X30JNgxRyQZJfVpIZZ~ zgtZ7^3Ur3bl>SKarwZC+HXQ_0269X)`}G+vo>TXZMcINXs9|46U(gAez9O3=F3`vu zG|tf&Q5z@>|972W*M_Fa86=KKDkNjfsyL9;5@-rlL03qx1RdI7Uu0??o8%2G)Pk3F_2G5+%A&_Jsl_a!J+d7gM?Zpv);$i2|CppdJ(|{q=euxfG^BXezc= zA91pQ8dQIv&;ND+elDxP|hgW+v1OP+>(2H{I2rr?q z$wefHmYK-&U_H?WfJGC}LCvBdFcE?eq^pl|_XB(N6T(6ctQ8_4(TQeoF`Tu6pTY7z zSRdfTtwElS;|%o2@p419P<=>_Q-(BPCYUc_7Q>|7C#7{vgb}0IB%T9_nL3Ng>_c$) zx-P;4s;GpJDzd3ZiMXDNs47#VGoYd`0fU89s=2o&)cVpD@glG?zYwFGOSPh?&i83z z0#?2tYbEyo-e>ZtoGKz+;iW6IC`|GaPGmF|v@lPQn8yp#nkgZ9jtE<|==UYJp;o`* zXB82uZu+lBP$(wUUcUQkP6;6b)#^iLU!f8!5AceUe4JGkfUg-Aqml7X&hL?S7P1Vq*vN>mP~w?w@ZujVP`c+^Dm z2cfVq4DV286+tmm;7MV}r^(@3^re(Mt-kn;^d8tmhfs!4+i$r|ww(i^y=7eZf#PZCmC2c$(+b576>_G`Fx z8C6XuKv0MXccVoerB|}Zgjq8d;8`{(4z!IUB+QOb!OlT43y_#I8$$@0RM5`D$eg63n&=zFCqDmT16IV=hicMJ|e2K7H%-1tg9yblPdPF-ggAbkI;4a#afCWGI*l ziM$q$*X1o7ul|0JVYKIhPl^CvGt$9F4d>=plfW}cKgc9zB%wS)86L4xOeo<9k;tw_ zNOnsRT_!_cnGp5JGgm_ozKYg@)&hE=JP?x9GzOfiF7%!_LAueG3N#UgGZCZ&IT+-dhf*cZR(1yxcX5fzU8KgbPKul16n}}wf%vd^2Zk>D80`%z{(8^)%@``EK+6U># z>4Z>FsK`$HENGV+h^GmsjpSzeit1&S-oAN^K=(p$g+$P1AaZx4KT>*5NFpc@`Zbf} zCK9sHGzKTc(AzgRE;;w02k*3z3ZGi4=n9oU*xfL2)d-+A6w2xV`a;w)o9@JnjlknT z4DJN&tGVK|p$HUeg1+O1aNdn|25}1CN39F81GK{BW;UCC52@1?It##>!ZqPCG=Xwq zJFO-G8#+@C2HmODq!ZZ(Ibt_7?B&%WrMh7N+bhM*TqTiGoJJL_?!SCO3)QP#Ls8i9DC5i-PN##zA;@m46 zI&u$+f~!M50T^MHA9xa3nw6S8fK^YeNr;XkZ^|eYJ>yO13;G4EGj=;iCuN z32GaPf@{K=CWgsi#ipd{Wks*6k!c-fGQdW{KnLV4%!Cc-X1R%BA`=}3H9L_V+y?=i zm^&KJdhlhTarMx}R0d~R5qY^xdAzdWejWoPu$!5j$HNHpZ zqd2^yG43hHcj-l%*ul$>5iq>-dQ$ar2N%Zc+O1N#iDgAo2IID(=|KF34rzWU>L24H z7@dF#9kB4EN#T1K9@Go452&mH>Zs7)9QPbnyW4Dt(lFX)~c)u_mZswuc!z9 zl_tJj(5V1mVXbr~}pEVIbzgXmDXoqjr#>I>Z`M{oAkPc6GS%> zI>-@Yc)+w6nMpN>EHw(!kZVMK8-AoWR)frdvJOda>wTRLp$Qq*g+7CuodUXTx}bjS#K@PNeZ#HH?St z40J?VQ-fZ<9KVJ`stjV5Tc)ym!UoXHZRE_LyKh!i1rN1_aFhf`JCL9ZE0M##rold1 zMRwOH=mkO_h(NIY%6R`(qQ1q}XER{RklC2^z z)hmXQ^ht&rR0k8*Yvjm2kf}uFWO950S`BEYgZHQ0=E)t=p9uy}v!r@?I7FlYi~ulp zreoy}t7j>i5_NAndGNC!;DOj=i9w?ZQK_INq?MVJqq{>hn{}EA_ z66`ZmfcA?~FQjC1!5{uBsgmP`2!Xf^C12pM<3&2HaBDxxY9e!Vo?N3UnU zFhSI59 z2>KnW?D{^UCj@6SAkqrpM)4$lpmGmn49J~Sj_{RzQ9%`sCb_Z5R6w%$xRwgTNzd{| z5j+FM5mM7C%Q7jb57K49g~?1#u1b9+ViIIHF@o7P27?EWj6?#hhNdJ1*I$|ah*A0; zn%diGQVsYVh5`db!Fjp_(q!P6Ovqb{rEIe2}m+M z-WG+kN>F#G$d_7QGpu5$FN$5zAqyoxuE7B;kvoc}7RI+}`A0kAsk%1nz_KCKryRl)tp6?=`Bhjr&dZ7+(vN?N>QW<#))@t z$OrdS0-MZ}rYC$s+xinpmWHl6G-6#PFe|=&!i`Z9hshqO0{mxZrZTAkMQF+oRhm?Z2n-sN*Un5l zqXS<@@CNp3) z;4e;-(A>`A8bm@*l*l)YRVL@t6Phw6kK~8Dl9pCxUZkzS(kOdS8wA4;jHadJE{LQM z1oLK9ktwK>Xkcvtd45)YQ*Kd__oB@rzY9C3S^AwDvD&m`{F=WjB68(AY5jgGI})7K zd0%JY&|lVQd))~em0CAt$72UYl!cMxPM6=j?6*Ii8828rXw$GImdrP!wpOOMF6w+{ zlQeNt<+Mtlg$IM!l0R46xjL0SFk*(>I3W3b_1YWz!^C^cH}P)8+f5?cPXyQc2Ul!e zGwk-#$oT{49j83T-yC!M(1WypVE`8wEDytBaK-ICcj8U-$DX&5n;mO-J9@)~>~TqL zA$|w;%u8(c7CHH6HCkPxe_x%QOgn27QJ(=ozPO^r_zzLd^-F==vsN>{FV36n+Y`!Vz{}GcPph&b*@M13PM;#93I>PP=!<*OBCw1tc+{FpBjOTmuC* z$o@EuMbjr0|Ducokr2KRt_(LQX(4@08Gc+(l4%A?2VtQD94g!hsJ|f%k+5SYde;GuL9<&_jN;LCs)AxThv_k?9O!xWfefIk*>w-x7y#%kOEyi*NIYYRQ73cJcE zFGq1b2_BfhQIW%%R8jl%lmCHh&we~Qg(v5J4oEB2I&^-3-|CYd>|&}ipmTvPm(ZX3WMQXd);Lx4r z`)}0yaGyB-5ttMsJ3mQ$c7M)4^WHnpn9o`ob1Y=6UQ%?;pSA@>{`R(&o19|~G@hso zIozEvey`ruvBvdBE6(w@-t2l3+`VU9miXS(rS+pa<9Wv^cP|yWZOprRctL)R!$G0t z-ieQl{ypDtWk7fkZOqgKiw%u8wvB-Q3qb=*szAx3RaMzu*pxx9(|?FPPA86_1b%u`%*(>620#0+f#WkQw0 zG5;;&wfD;W$PWdE$LO zPzZ^uw`dsy#QPLnGnGAkJiS1_Rcizu`pHY3|YTf9jzh{Wt$0xV54sH&jG~`&%t~&qx)apGaw?3{l%g^Q) zj{cF8e)omZ@R-T8!y}IT@@f7wM*X1izbJ0BH;8IRCl?>neeam&I(b(7j7y0FH*Vi$ z;I^^xU&sp9&lCUYkpkVCX;Rm87war-1{cW`I?bZ`>Y!A*)=e_^+`u%|9 z-z)0!`H$0l4?MecegS>QG1knVKVLL>@Y|xT-`O}$Dhlg=%rx5~`G>pHu5CEJKP4mO z#1>)Q?*&!!cV4Q#{A8>9OFH4wy#Dg;31O!hUIXL1?xYR+VV*_u?(=8Mw*`iFiTomt zJZ>C)V8PwWr5AlfbSLJfLm_jo^Bvhn^nuoMlA8`W3RbNSZWJ&l7(HZN7KLqvsl8Ds zOi`!5^0A{iYzsJjl5I@QD)hF95Ia@`+09-aUAFK1OZ-x9U zF&wSEPy<;hH*+(6N9={g&Xt@C2bm_rD&AH`Exxva6P`^EXYR~OOK1=dbM9X_le?2$ zel$JGXrOh-EB~;Mc@Ykr*4*W#+&zwuj;8~K1ec$hCg9BY*l^4w|7rCtqezF2m-RJQ zk8hgn&RCf&+^8=L-D|sAaQjtNZ4Q6MJ?_&L^M~4VL~&vI8@!(vTyj{jaFVU0@M3$* z+#z|}2T4OMZbVZbzUq47@#LOBe-rv8Lqr6_&o3~e5z%RHTu;KUQ81HnKtJEs!;d@Q z%&^=q&_x~!tL{)Pry4a>vskY18$z8ExSLGK#q*X*>TZGV`Zw?^9c9Bdm|?*bOC}5m z_gQGl5RR19S7||D%96CW20OVigb63K1}NYs4e(ZkH=1E`K&$ZyYU0OuYTU#%yB=-L zt4z6j^!y{nj#K*wzcCAc)4#os0w>q;DL#mRXiehpLxLD zSc4_Co8U)6^NM%&&+cTW+ML^U>(S~2f2a37#GwUp8=pM6scCH?t41Vxu_4M$)cop= zG4Jk!-Rxf*Cs%cNEIPhke~x#wF5hRc!tKhIzX!Ulxw*aS&jgSDe?EN~{^C__>eb@* z(+{>8Zu>!!Ze#sy`tm^0`MQH1TTewWZC3tNUqGLEvpy&Y@{4&Bj4Byn`QhGjV&-OQ zn0)FhcuJNfk=qX!+gazPU1nU4*BVsq8AOlYB{h={m)ORhPGIE5c?-14IBBokMhXpx z^(#D{u;kWD_>@uq5;$=-wamSld-W1b{wJHFgy^P|w?{UKrG?wk*4DHq27#^0uR z=H9fj;ps=}?x!Dy=~@;(bGv=h_iFY(`5h;^8hs=MD;+|;pSyfKTK1&-oUU2!jpJl@1!`UKrR1RIo+9`|0H_g ze7RXe^1OwPYu;!pM1PL?$0J(4(DtC`_@M`FTk8)!r`rEJ`C{!HLFAkgJH!1C`3;+# z-_3ikYbL$5Tk`J*f7Wt}q6A{zAG+Yfrss`=LJl~u&RW3|O?S^MxwPSmwDJx|gy4(XkGBQfTHMegUHCf#If8jjjvwN*)Q>SC16jvM9e@6JEaHv->t~m-rL+ zS;!_o*8FZo>HBE~(c-~3$}N6z*b~m;bi5L*%XUiQgqqq&3On1Sj|%b(>`dKjVS$?I zGBG!eKFp%C;uXuitCbaWsPQGgSSoR>HIf~AE?UnZo-i2!aj-W6ew-Z&zf{ZZ2?svY zh9-7D3X31I0pt@;Q3``d=BU%l!3k!;LoZJucO|CP_&V@udS(q7=ct+JdAAiJ{ZOim z;u+<3t32<7^=x5m)q)+ZbL-DsubEzIsei)2>Cad_R@<Ny8*SJj-UNFL);yRUQ@3ZQho}48>E(>7nf>@tiWRnplWD_te=MI_ zmk~=VH#MKL!M8;aL%d|g)y49{YM3*fkGilOCPW(alj{jb(uT)caFXfwo04fofjp_p zi4oBQztf66U6p_M^d_;nliXUeYl7FjWMPBHRz`fnin*`tcE4eC73GbguH>xexU($+ zR?jIlNc!E6YCCR_*x!#@we@L$&2i&=MH)=M8PsBlI6`bU&D_cNQ^0P=o8loRX$%wU z2G`eS()_2P8Ds9o1qS&*23@HA1|Av`2cfyP$5wc31f~M9@Ixton}7dA7JeMZmPZMP z-~D4vfcnr%5l@a7w>AqN0~??au<3gYU0MJtzN#i`~ksLiv;T!{*3sCaNpx<*Vj4%-+LDR{F(j}^jcQ0nJy8x`q(kf zyb^_sdz5p11AD_u*Py414xV9@h;pvvXAd+rrESg5&De6CzH60qs+1DCC)_J~uV;~9 zYL#_8u>Qe>6V?pkbxpY3c8g>jm1qk!n&?X{-+qY0+B>AULvAz1>X0Jrjq5M0I+(XN zFK$%Cj+NVcUN|h$=5$Dh4d38r>>3zhKQ&@RIpx;u!f_pimeg5Rv~T?|iIq3`G{b69+CTQQc>X;ERbeI8 z$~Yezz2rzDGi`D&(#&qyJ5wYVBieh*|rw+F(-Kyi6Ro8oZ^pBAfnokwqTp3lJ6ZI(K;pecK?cT!~WQkSa#ynLr8SCOoVSTy%?`hl@OZ+O z<>S^c!YcF(EJuOAw-ICIIrlPYScl*kv&%2!~;c8QoX!hBOpDr3L z`fS@nbZ@b`?a$Z-UFzS7k6;LqFg%Nj50gK3zPI{VCGEcU`m!#Nci&LA zZB00xutNW{-nx#rIs2vN11^`(FcwcPDgW+?=lRTS{UROpc5JIpxxz1S%NS?cKly&Z zqKi?Se>iWR*TqQUI za?CyVVPlG24^etNx3nV2vBmSQ?RUomrvLTY`s7WWYITw0EJZ7Qj**tcD4LjEYhMBb-s@$G>Ymp}a2()s!POIFvxZGgv? z#d8M^XLO&nj^NA7yp~H*yY3G{jUhCJ^6=6U+W?M?bJg=n{WRi_V?qnpF7nFUb>vI`?+y_ z4-pq&l&~gyz|MDhuLc<(yZ!v{XjnL-qi|kyGbN=V<6JtZD&b-oL zzt)XeF>*`ig3L{<1eSl7TiyfDq8US8|G3sUek%Wjha#->@%8QIKfm0Zb<;H_Y5W1N zkNRxyBVG<3OzVKU6O-fXKo*nE@p?O+cuu_G*nKl!lEayHt}0{+-DP*0aZcvocB}ocD^N_7a_B^}Z;I8n?N!m@S-XmiPS`ORjtS>a0!2hrL{vbKJbRQcCOO&q#ec z8P-;V`5$(6FHU=R)I{+x=FLU-Zmsc4%MSlDuXXmbjYp0NE=LTCrUrDp<~1E=Hx6xT zXNau=JRj3a<%EN?9R9b}KVj=qC)R)Sk+GKgC_D+cfr!zUem7EB-^Jg&&0p)eC}QgD z+OReWJj?sgyW}oB$%}rhFp_@<3pj_`r;AtoI>1a-h%{$_6IjxG7t8=Yx4 zV2=7uvG4I`f5P>X;-urwE1zoCJ04QR(kNXs6;@JWn_^|vL~Uo@s3`8!MiB*6@lkyA zb+}tonn-7yoK@1jwUSZ9IQv|A@{W`rKkUVL+X%JP&C^D{a>r~Gla>)@(K4_E&g zHPGVyTZ{d#=gnA~*+Zlo`gY5I?ICg^j%Ve!dd@0IIS@Hv`>G#+p)YW{a`-*OtfB9Z zyGX}rpK8s^UVJs(Sy168gFgCq1Z+S1#^w2rnE9(VTSUMtJlwmec*VUF9}JgvJkB{l z`}H@=QIHKCt#p2A6vesyIbr;3<_GT$is3-4`@PnRokQU2Fzd%{c|>)j$@eZl##*%x z?jimfopvLkdrLvr`|-=^5_5;L8_Ta4wY0M;KaUoy|6I#0(b?B{_u^^iYBR5Z3;W>#V@!L7c@Pm{KP7_!Q=_#r(c}5B z|A>cn|KP{=(N+=kusnV_k!o)hejr`-oV?}{FDKCOw$q8Z>8WvgThQP5X=_{HQPY0h zXqO;=anf6OtU7QrRp1lOv@9I7JPBHL_-g}tF1tul7p{PvBeNnT(pR1gB-pAqybjC+Ze>93HJ|=x<0CmR>v*=MBpRwloH8=Wy%f^TawYkvAPK zmW~9(yM8xYc=(ffkdu$jnBVx0FX!gQn!B~-*Je4>iz?UzkJ0St0oye{3BqVs+H*^1 zCif81;rd6)r!xE<*{54r>C#FI|Dd>mm6o&{&PRQxQi%<(yqLo!`2_r=od=={%?B#? z_rjC2cn6_T+wK&pwb+f7&68W_Q$#bk=4^s?!xA25u#L6wl2rZ+9?o*zV>%*%5kP^T zu?1sS+?0Gg^835o9i9e3Jn{M{f9;oiSu?z33pTb|ddnFBg_JV%oV!sT_&b5N@x+o= zngNC7%3TAnF%{lCf;X+9eXw8$yg|ejo<)Z(+r7J+3>=yEqlO6JjX+GQj1Z#N-@udp z@CEjG?euol0~~bEBZQHv4VwaZR{$+{X9aA=lwOgK`_~6pIa+cbHp%0S8n9UdUZJ%N zIvF)2T|kc&qL-&Y_sY*^vRc{^XpJU^jV3UGQf@-PTRY(Sci2Q@291FE5oN(sv#?hO zp02mCfxS%HUf}M~0e%tJzAF5-4C{e#MSDo9z}?5qSIQ8A3G(5RIbZsQ<+=lwV8qK$ zJ)&~I`-|$YbK>J(E%X?Y#JVh-QrPNOAMLBH<#}S}bZT{S!{Lh60QPlH1lSP{p}m}R z*!h#e*dfrH0johg%0n>26SVsdq*N#jIEq-4lrqGq0`}4<@ECv~-ZFuQ!hubsH0dXV z+46BwXge#?3T)iqf?`2MHumG-xe3@wMyHG};_MaY1g+Q@4sV#*@#MhUe$pGxFJ+rw zx*9#mZp&<(-jJFBGs|Udc_M$lo{Ir7mnUrz&4lq+t9CiU+cN+QN}cf_7Em{%*O>`| z*w_|e@JtHqiz6gZY5;<2k!B?K48e`qY^1i8yBx29%i?X>XeSleVkh1lTZ&&90UHNk z`%3_CI4qC)kCHgk@;{1~gKG=>!9)1)MgYE)u^V2KCSdE>^69=);^N?4hUUx0cRgW_ zhR>+)lVYNDC(!G+6zDQy*+Els*!~4oRg`Rg={uI}Q$U$H!5eN7df4Nt_qn+10|~9e zzIC-FixjZM!()U(NOvwIq!t> zK!eSvlV@HtH2Id}?ec~eVgdoZYUu}578<++9*Rip|O7qbZx#Obq zFj`au_J%hs1^kx7_B{cj!0=`Zphb{mn*-bi(9_X@=xFIdAP@rsJtH$G3o{cFGY>llDAk$_OBDbMh}G2z<^ZO z0n}_%KsKs>UjTvt02S@!YX4`!|5u};2GY>df#?|+nJx!3T>(&20fE#sKw4TFn#<8q zm-hiQY_#mcayoPzmad@dXioXq^fG!8-G(kM1%;B^8yF zRbZ-Wx9{lb8z2mgtgLNp@7mcrxO;eddHbMzgCB*2hJ{C9;-4lYCM7?^W@Kh%=j7() z7nD~Jh?S(O>Y6ui8=KxWx3s?h^!ZD7Pj6rU0C{|3a_Zak%&d&b_7Zm{bf5Q6T$o?O=*e-EV)6f8EK>ve_iaPA_1hUc43d_;4>sW$Z(Hz(1 zW9d0{)5{vV7(^71zqs6j#u%@PD*m{!|3A?F7qb6%z~cUYA^YFJ{%>5f0A?W7<;w%I z0ki;RqN$m2sOKUALE)$6I=_1$zkKvQhrKelI{ak%RdqhtRA!Mh8$VvwtwM8hv9T%2 z_dU!?CxSIdq6@fX-Y+TuQ_=~t?9d*(f=S=dZ3BE%aX^U{n}Psd_3CK|(Lmz>_>m%= zf9LL&>1ppjfCIi1Sln9kQP&VY1NhN*;VZulX5!^}8(*A7)?Yl5yRIX(4&))hce_&p z&55?s3SA_+^;ZssDPM#8=H6x&w+lewJ#+Yi&|jT#6{`JyHc@Sbzk3Ui z;g##yyR_)J!k4BpC&0Z&RfE{unPxwwdmB>>Xbw%(N7NfiZkvLDM8k}cBw+F1tXDzr zXm5_Am+_*m!-gkAuqrSbCy=CifhzqGNEa1R{>jf``~ItYc}vzcp;@jXvVY;MZKlr$ z=c%k(Fua)(8MF%>y1%}-gI)nIP|x1n+@)F}Ukik}H!Ie)2*qija5|zffj(^4+n$7% z^u*n7Rh-nE5WpO2zfZPr4l-Xilh;J!!d!ra8)M;%dWWLY8acWARuCO)AfR%YPui;A79Yj_anOXY5v%Zs6r)OJ*) z6^eza^VZ;H$)zRo|ts~MuhWLJuCO`z3k$gZ~bY?WDeS}-tOy2HoN#kF_Bq1R&t5K zFtZw&-x77NUarU@Ucb4mefC1a3$(}kI6Zl~HjWR-yq~G=2RuH8k6ohmVeVYcwr=g?H@%+SH>e!FU-~vI zxFCCZ?vVXMui~dZIxym-y0!dytD>}hOXx;tZQ&FmRa#dw;{NA)n`U7{UFzM=mC083 z={TXF1#O_}$Une+uEO-6mPzmB-UZmZt9G5`z9vN!yZJjME~EiSqMmHGp+X0oU<~>X zG+hz3#$$c8hdMpwfvQ3!=k`lx1OJNsmt6ot?olsbMp-& zxA|namy|)bjjzr4#=q#O9 zJ*=)VP3iwV*ET-(y)CS2tZNBUQg7J!N2faLIf*l=@kMOTdWYOfK>h^^6BI#E6<2SC z|57K9j#VnGiKuEGB@c7sONI+`ASp!~Wv4dx`uZQ=`Rm%nQzhWWS6y0?8&A&9mS&Rq zQJlYJ7{C#xv!>$agZ#dzT6t@+7xTJ$%X$IF8F0jTb*p5msN*EIjmUk}Ej(iMz|vS> zI4DSk7v()qhc0eECN6o4V^J1{bdA{Qb$n4t(9K~(+P;UuX2PAc_|z5O+uYLNh$B+X zuBgBtsk{Ee;d+Z-GZr8(P2pwp^zNy?elD@`y``ieItARLId|cZqb+{nD)2ck;8E7*8rOxp7@8fP?d?fD-w#T9c;_?p= zR*vA|6`#e-={KT zqg}DK&f2gQD>B+vB_L#3&6_M`HfAWb`*w@5IuOpN# z76S9D?h^cg?2=^p0!2o0kjtB8^TPnvD?hB=#YZO=-O`+dS3H2TPp!7Wj~6nufAW|w z!Vi&#fun+QuPXu^asL44n>B}ydSJuo62kB`|g)@hgskquZ;Tt`qvC(b{ zI1g*-y1T>4oT0z_ix-a>TW9;~8{-c$6tZ{z3MQylhRmgArPw9>KE7t^tFCy&E`G@6 zNWe$cyl?7HkXv6fyDntOZm&6~1La|)E-QrE8IovYDGg=w~2rG{+eE89LUX$O^ z)+ODhc0l+aD1(q2UJc1+jDA)eL#|d`3dE2x$T1gcwb4EUP_qMA(omGShMw7QSa%64 zP5+!{M37{}ND;y>li1$`;RT(n`1M!&#Z$t&S$wVu_iARf`P$g*g5dE5nZ6lj^xQwq zn?z&#l3bVeM~sj!GGsB{*zCJ2v?|wF`nPHI7YxNUQq-(ozm)Y3t2eoO>Nxo=Gp^%* zqJ(mujUE2o1u|MOo-Z+?Tb<;qEpfw4dsB{_R#FH9PBS_cb%qg`_4QHnK%h8X%EU4EZ(?-7 zdXs+dY#N|4a|m=$5fF)N>AshRHUlzhY!JeTqtsacn^G}W)qrE7;#1)vzE&bZh|vWW ztS6+{N>yTrs2(N}*w2 zY#g7ky;Iif8!mbfaa^TO1=CQ2gw#HN<04CvZ1rPypI9gT1H7zOf1YuEoxT3;!(S)8 z_1ash_tbE~wl_ko-d&%g>JuHOu1*hwRI9qrTTC9aG+tkQPt{4_)2BjepsnDpb1N+W zosy*4``C14M@&C+v2bQ$u0uG+@xLvs(z^gh%kPB8Rz2s$7yaV27ltD(W)(N_TshYR zS<>XsKEv}bg73Rrtm8SuNN*(UL_z0_za}^e*VYp;9y!y_bYVeD}?KCQJz*Nz2 z$x10(#_zl0CGC-GRT=yU#HWYC_L%B(fu4rQ=?&}ot8FRI2m?+vpgd?glQQW3@@{lv zAMaxL!mbEgdrWqhbZ~L|(TGus-O97)cc$4sjLNG-YnGRA5#G|}8|2`3Sib-Cb$l-) zpONwRg9{sfsK_?Y$go=Ubz%Ykiv~j&5E9b&53przoThRG9Gq_ENnbO777Nl>v*u$C zL(%;MEC;NW%e{p(iyp7lU7;}wd;BFmb{ZMYrA#*`m5e~AWTSL``t-m~2oN^==IX}l z8Nh;s|F)0~%jJE0Ruf|#beZ^l6TL1avBltF)WFm8ka{)l*=?^yHKgB=9ou@nx;JMg zA1Ua4cYN{DK?{6hE`s1W#A?e3uX+(^#^kO6#ldzpU_=ov4!It=lAcDB^{ON~o+aS) z8vfdD=GJVfjp{~fFVW$JeIVhY;yV!)GP-7&xxi5lyk$nB~q*9J;Bg;?|nMUout&!4s(qL}etk55q#t?p219H!~ zGn?+4z<)ylvx{bGr4$Iq)cZ0Gr5iU*?YPPX0^wkK{tndUkKAI|5~ZM;fBBh(I`={J z<4X&lez#cvP`TZA0M@tlAMeI^)qW&i9vX)Br71Kjzb#9 zJn*zOXdV|$T^VWD5+LWqH5kyv7tX__7%))gX_W|(+e9fq8eU+(N8(=s6uZ;QZ^pNS z!TORMt2Z~LDXeQR$vol5_a73)4sxYKe`&jEv`r8*Ji@VQh_i4Kjrd?Ep8=S4(aOeO zFG@+WXC_yYF)IK)Y?}@-mJw6E7f2=a4{*Hkrsz!$E}K8~qlwi?zKVQt=pL1UYE@e+ zCP1VtM)INzY%T&*?IQ?osj$U;mkFLCB%d|--L)0k?SxP|RDiT6N4qTE7FF~gBVFgM zR}SYk^du7&=_wiwWNeC;bE=|iqR8ktgZL~VNTrGIcGxR_g+spS)XdR|WV!G4RC?;o z{60p@ekO;D*=Ar<7*wQqV&pyAI_K#wEWIEArGbhhcO<#ML<%g=tb!5d9oOzMfo~2& zKX&&M*Q+a29I;_MVkqtdI-d>1&CBG391}I5 zAQKLws|7A%u+m2)wjMn(SqY{WBIMjr3pKZ*VLb%PCbTP=CS*vsa{ZkIfMy;0L@2Cc z55s}Fm8!YPscic4v-sNBZOT8#$Rlh^UIkG$)L*h7UFvyOqd_7 z<>JPMVP!Fd6)J>I4`p~g)OnnS z1{B@qasL9 zPYSvhZ9Er?kX0DxPv8|Ue<-yIZk-M9y}xRPWhlyJdrQZ2hDo=)b0EUOBhm_3F3OFd zDP)YnR4rMV5OUUDv|FB~|5ygsH~R=aUVj<=p=tcn&#^n+jMPFDp{rUBE6X2jv##Dj zAhivd4&C9wcb6vzP3~BT;_76FBR!}tHXT|wU8Sr@kws315Z_k}5=jXnFEyKNPpH{# zn}Zy5?P4MXN~3%d&!UH!H?bn1aH~_ag)cQ_H8RxTAE5ZbYGyGj*gME`4Zs+O_0VUDWu zdu#0aUgpRvbBA)#OyiD%sb$@Pe7?-gVKt69u6v*>h{M~baX<9KwJ1lV&9G`|~mlXr!1 ztgYSP>)-Wld8H_;(lb~c^n*;L^_qj!QktaE4Y%(5q97sFx~Bxs&b7B{ zj4L6%MqZ1>Yn7g`ZUda)h9L{K7Jpi86DWsegPl+0^*S)&EMg-ISol$OK~Sg4gcE{@ zMm0xqlNfABu|KfYIV&^0TmM>dUag0q5iS=0dmL$)ZLV)NipwQpo`}BtyjhaXzsb_;^S1n*|ns(`Pa5zBJ)EZy4lGJ ze#Y%PXH{zy$OpaqG-n@Gk(2E_qEpZyjWkGJ7$^^HKfLQcZj_kApj=#LA4FC2?XF4K zonK%~4!6*6+c%XJ>=nw>SmQtQk>GsNL&iYsRHu_F5grR2&Ki3Lo&Zd|z1~*!+vzso zU{PP26~D3dh$u1ew;ik5$0A#-bre=d-QbmA_Pv82Y%j?=0h8^{U+v)!na8T-IUnjm z42GDeIMqwsR!zr)N#3w>^~avF%)&guI7RuV~uCE@v*nh3bk)$7EdIa5}3Ug zVp8KH+HD30z4>cpOE^}!Q*R)v^#lUdvz%WGvUa~ zz+Ik;!(RcLv8eLgO|)tTGFK#=lv@lQN>N)JT&s89eQEk0eCLjO+>-y9BOL4Aqm86j z@3Bb*Oa#BqkZ!XaS~f_1%#cS*K|lpe zPvNw+RfI3vIF;1vvvQBzn-p!A+Zno@qN7neW9}%Je_d~Q*HkO;h;T2fg`#BK%FGnD zV#Tojjgx{yTb`Es$Oac@?Z>HGHm5YA$(L2Gfyb#lR| zDR|gajOB)UIo6H6SW?aDK;oXu7_@5R%UYiKy7e*p?cB5RBnO{$lHxYRW0YCl%5ER) zgg>nmn9zu21o03@IFS^5B$A4-Z&-ZPvW+6u8}kYzfyU1#Vp})9?N=rFhQYD7stRr( zZ?m;Q(BC=NVqbjN)(7zTDLZbZOx{mZ$SepN=(0CdcYO7cs2+!~qA3^6b?2VmvF)`& zM%-_ke=5h&`t5gx*58^e-@Ag|cDGq-g6JWCL+%H&ci$B{28zWF=9UTGE6L_rC#rh^ zMnI$Eteiz(;Bq|OipQmq`^K}RK%U}u#i9F-@MfpWziYL6?<$J{0& z)9+l?FN8{RC^ z(Bw0b;1GToVLQ&+ znPQugkP!q%8;?-u&nbo*nU|ZoGO?N8Z(OSNMch9?WE!n8$Gd*f89q^MPYg3hO2=k< z2Lh>^K}8c3{x|E=j3sB#ML1CkObhOH|EFZ=y3&St8rw9C0DkXyAXXdbPxK*$f9(ss z_y>3dHUv%_z4VDI%i1q4#f~*k+QOLGwcnI=O)mh!ODE@#N`ICmXS~m<6Pcf1n2pNu zJS=h??&nEk4pR7u8B_eGz*Vrb@Vv6y`STjEeBa_v&7=1m4m-M>tP2Nf`}n_H_a8NU z6?e1fGqVpDS}!3=rL9NJdF)BG|5la`_q(O_XniW}Q{VS?xNIM6tHAFz8_0A1z$1PG z+n{K~=Z16fR)51#wD z)BmEP`4zET-77d8(Wm6Y%sBk8VJyk?RwQ~j3__v#JrTvKm95&)CrDHf=aN`72?e1pf;epMa2eN<;nJe);MgS8#T;5@w99UK!^O z?j-S|hM~d0t%%iGrRs8?~68WVL^*lnvwDanZxfoE;13PhXH;+0eGE#$VC`K*|v`FnJo>V54 zy=S18h4j2-)o{DBH69_0H zQwTRDj+J6QO!uI2pTADagQHISgZ3iGcl9v+UI+%B();K}kR{F?Yuc(g$-Ay3^fFS! z@r4lcid!Kb$}>V#?K`d_x+U1LrQVw~l**Wi{wjS~=551t8f}K)AMvy8Xotdop6v08 z1u=AjK-~PB8vG&!Vh^EKE?oft(c^yrv6mzCu@%WQ7B$MR^fg;v*~+cH7>heCCKyvk zm75+0sWM|!nx}{_L=wpN6?3AO+&5AEyd7m;fL6aHfhXrZHScrz+(ShEGbc5iTbb4y zqfI)P(rhixw7J<*JN9e>bmvVxUO12DcAy zxkUYKs(7pKyOH0=@H-|g;uCPrf$7i6;>NMp)YN(qi%~L2f z9lvGSu`v9LC+k)<V{$UD(lmfXJyZpN9HF2q7%dT&=nmunV(OI76T*Y@CUPDR!AyA2( zvbkP_%Mu-drcX4SR2kgdF%P*hQW;UEEs)r8)Bfy3avB)Q6jFMkxY)RB8gsaqnQjg& zHdSXTo(yeq!tKuC$NIL+HJ_U(Nuyqf9-ul*;p@dHuIR=KtbiQOG6kjGrN}OEhh^A| z7IZ*l8iG1R89Y)TIZ$0d&E&BDQp};7KH>-EvER}Ql&S9w`&wB-`?;5iAabMrL-dO- z&55z8+?OaKg3yyRswYHT=X{^6tAH?2C6NWUZr?TuV1b@nz!V8PHt6L+T$zG|tD(f}W(6>hv~=W1KLSu_GG@SA?k$d<>h$e0W5H zYG%!c3`s!9+<)=B>DX z3VIyi{<_}K`(4I0aaR{vAV9^tn116scE}4FcbWgllFI%81Tki-W{m3UI56|$oSWk} z`+&2R?50w+)h`$?+5yU`4)IwoW-7oqf;T5(Szkt**&N0#n0@W~$&K`76cZ#6@ipof zOfl!JF);tCoUl&%M^W)JC61kyIBoG*tm$_tccGHox80Gb`S(h9Zw_-sh~we{)uXvW znfmvhe?H6`NECH(ZTlOY9XB6R`%B$%knP1_!k_iQagEN)EX~<;<6F_6_0rs5(i~5v z9dyg^zYD6d(Rbx~XO`D_k04&nFYBW)6r z=~Ma7Ct5|>DpzcJpn>RuU@AQDxbzn*=%B`L=#Gh1c5pY$J3xEKblQ<;Q!-%YagA_u zX7N#MPz3A(`k%;r2_|!3ep*9rHl}Ij3hvDcX0$JSW5YIs|M~d5)#DElbh&cT{nO>0 z#{}k!pm0^lQLUr=)9k8g8AC=bMh=l&b-y_jZmjw9~;RgLG-S)A@`TBmPe!eOQ zw$+WG#L(U@aSyi&Z4>qcFoVnUsti{sK==d^lQL1Jxn*gY>P#G_$7o>=WtNJM5{N6{_Ge^sabDtii2#;TuV4!>uwyN2KEKe*mL5 zvIa(VF)PQ*q}$^fTVmVWA;`Ngdi}Zhpr=a85>jW#R+31-7e@SAC4?EdgcMM>H7#O$ zk)0rp4e(J6C8DQw=~S09U}qGZ)%zvu{Z|-1TY8;Vwrvt^HR6QOBc(pQWjX2vMWGsB z-j!(Wt7y8xS$O-kWvsEb>gD8s@4mY2;~U&A7;+F8DdyZFv?9>>Yk>7Dp`oi2@IEojI}62aR|qMrACk^EjMaH23{sMx_n%PL+2puK+XGqJ3_7A>YGQhq2A@n%@Y!MY_-F8LG=&YX)6XfR$rg>Z`oraE1cO{ z7lwmYj_Y%iO&>Jnw`|4ZzUg9kt&Be9mA5qe+^~7nqg>)kd9|ZQJW9i5gCxzJ1hQu( zCEvUj36_zS%KzrKW}MR|OGOy9x)VnjHo8KX6@82<_SNdWK_Wc4ySZ zF`rTv35UR(LwCsq>vh%3aCRy>DU9>sjoO|2a$ue${iFID&GPl1pu%IZbKk-QhuhpS z*kw}#-R&^;+pE3OetiZk&1>Ap7gCzGhuj}VYrdpuXvrMIIh=Hu{QV?0TBtz{H7oDa z*Yua-GjzCu&H8CPUK*lq?HOfBBUVzD>w4EdKN|b;wL2vO9=x?>sfP~W_X@v(i*3yQ zP5QoNo3QZKba(@kDw_38?)8o5gG5h_Z z;=vT=ni)ZgO?J7@%qiQSKYu!2u=b&@KX{OSv-NwT3)l=+*+&{2NX-kP+WQBXssjHP zPUCOY2Ygj287|81DD^hMb7|jDb5-+atk#pd4K6YbYyQ1B9xAxQ8Tic!uvY+G8x6%A$2V zZ{kz(j;jo_zQBeJfe#@^)cDj7Lioh~&ta8sE^yXyNyXuno~bnG;du-)?3t~(3m>m` zf;LTXJkE;Xw2K%Kc^O?)tJ2Hg_1NJX7Je%t6Pm9W0yXYj;+XO|gZ$*aJy z_Z6I44OvYQ5t(p5s#_IxFu`0Mrjtd$871NPSUg(Kb2y&_U3>WX^?JSJQKed@utvlV z^2q7#`~0&9SB@^txzA73bmbv_t>%+X%Q`2S8$$jw{_VIzG?gfv$|Ism&^)5*t>+wl zDn8+XOz~mb(x#;A+PX;4VO2{*DuoBf3v8EDvXTnQLilh?_W4TRo8;aY?#<5 zo@Yz9oF>R$#@>n2BY?2S={v`j>grCep_^bv(txV=eq{o{)``Y0jUMU!R8K+45uan`Y3KI# z_7H53`z~_*>!PAPPb$AwrBGk7t|?}1)-uZJfr+;26&pM=c0qKc`pWngX0ED1uRd^8 z!qN}_A+33ehy7(& zeNZkgeQTuN?B`JfV@APR&H|f$xM;$_01oeg5hNN_oGR6dS}xAX^fL%W@7`6txs|5% zCj_t19DvXy*an3voWNh15zM*eZ#C(=@ih#y*bg(T6*d+9shl}u*Iy*L6(C$7 z(95XQCLQ@Vf-TqZ5Z>2wfU{T;6wqf~^O!ROWPuC3wu}3vf$~%Fs*{IOA;I+3vIz!G zr>9kE=xOgJI1qPKxAM^Rr&)|ZklZE)xj&xbD+{I)0g|ZWxZR6B&k|b}ROwU*;g}{eUWWzSB{>_RAubytYI>Qc*sP5vf%-%CF8tO2ma3*CM;>Q)tXsnfe z%Vp+MpmJuM+sIZYg56qXfS!?U=0i>l^=;+DjUln|>G4i#9D2M-Dj|`1C5$L?y#%W- zFyVVuq>D2U_1{{-=YluVvUi9dpU2L=AC&T$)1$MoxKK8~PYlj!P%M1+j{c~=o_E>h zMq|G5J5A?aRjoh1TV>@6PuLWt;hh7@=|lHZ9x8=Goz6Xu&#j6F6yJnNwI}p^$CUYO zaaO=aELw*i`R0+|;TGc`<{<#`%--ah&DZ%t*;B$&v;%SKleJ+cIi0i#(xrm|1Df~b z>0vcWKO=stM|7X(Jj}ECZ(6cAz97E;d+5MmBY42qrOmA8o*XWf+=35Le5UB?neHxn zpf*Wr1iAJ}gVs>LI_tQe+02Il=(YY}cuoH7Qo$()qye&`p?tz(@ynN8ft2q=V;^S` zS7F-!`bFN!m5>`fvy{p|i%1UFsk+A9eP`Zux0$^?=}G?;QCa}Uwt*5scE52_(o$|9ya_N^TzS~L4*`{SF!f=C}g7+i*^ zfKzOq03@uMY)719)LStzALuPrT>%;z7wX%zhDt#$suUW7i{>AdQOU&Mq3dWa*U_j7 zzlLo+xMYgsLWf2*`40D=Kf4RSBby=fxBd&M`F4JR@9*hXf!9RSJ}w;B2G3O|TE8ev z&6f|xot#@E-pKUNQ%MTuooMD=NRG~L4mhSCQmbPprLOZ$R6G!AY6A+TUHugM4$7$CeE}+9Q{l{OH=DoO+5(fT(k}6whaF6j`>9_`;unIBWj*0P~ zHR!nhhGoEDAe?&}di#njoq^v(tFsT%*3ISkbcCEKO@*Ea>Dz?PY4`ADs8KoqS3du4 z?GyDPY7&zcAR*G|e}HcnKeeM>6uQOcF9^ka;weqy=DAd<8&<;gRMsAs+y>TWb(|(f zeawD_EBI^SUWp0$ul4xX7aL|ruO3~r?y88AL;M5)L~%~?v<9p)hMs3D^;3+xRX7hf zrAY(h5#6}0eCr*m^oTAcF_(XXUYEFi%jN^*5VEGQqqV|r<9R>|W-N|X@xtnUJeGG9l?Wp!c2q0GlQXGUxVyzn zCHnWQ&?!HmbH>y*hO_dh_VM(5$9UW+34L?$YT6p|1y7!A&m?S}KX}JHjx6;&9`dFU z$&NmV+WiMekRL#b+r`T>$bx%%%rAAj=My_jrXu|}I+IrYu@n%ndHkJE>ll4yW>b&e z1OG(%`4sR%sZ0FauhMx(?KZck@EEnL;_=0aHIj;iAI7d>${-yxbzv9xz-?BiKrPK9 zAETliZ1;Z@>;q4q7zH8uP-e$*V6#z!XL;kv?u`Zh&-gD)?%})ibryf^-59>l#9Qw# ze&y%EHyA832?QTkSRrgkk;5u7O%2aXg3BYWyUEss(ZSs{C*`N-{09why@YjY$VY9A8Va}A+c#5x4!&H#Ma{&%p~jcY2)@tmfWXfh zFiz!na+dz8qLzxZ%n&I^2%<{^`d>7Dx*k1-rxQkB(LqZ~=9Gm7u8Fw4g8(|Inqn;k%&AGcYx7_#U z4yu-Izh-g>m=9coXKsU zh01j4@2U2FQ{1SC%@$zabo~AOQIug7ukz>B-@k%K$MsK4uJ*_S!I-Jg-LS)%pfZ{u zj#Kjwbf_^?UUnOgLm=b|h8g*ck8v;1xQZ!GE!EuUZjO8}APvI~=>MC|VprAJ*B{iD z=Y2jgbj4P9{t->p)|Np5K(Gyjf>Rqf;1swHKKv9H7e6DLbvGukv((jmf%;K+#44Zm z#<$=pr9j_6F3!NPuyw`xIJ}bhI&;jrcv+QW3M<8M4YEH~;rG$1AVDe@Mo8>G zjOJo5TPRlDv!dBEZe0H$xf|5-t{cMmzy*uGRFyukt}PgRaD{8DmvfTl-K9T9e2Ix5 z+#jf0Yw(iQ9X}hAGaodkdxLrVj#pUcn6rN83>mtivw`<2u)XBAoa?6jey2$`R?wui z9uL`bGcyR*%XPwcR?e-wP|C^d^72oJ2o5;A+!m4+5TwPZydEQGHyHe;fc#0a?MSs3 zMhcEiPjzs;cVWQ?5nM<5yCTjGXzg@jEy{}tQIalSFxJYCtX?Fgw3aT%%qUi@U8qe= zFEC$9a(G+<6|gz#Uiop=KoP|sOkZYx#Aw{T*f$Vy@4zOQlN8GsHl`7JfsL#ZXG=->z zRz9mddzJCEH)x$lb8?2^Fu>f|*!DnWX8P)MCl&6fmf~@;8ZJ55r%_wf{CqHoN=vT4 zpQ2PJ=vjF}^J>9G19~W8H$Tvls2;YI2-FJW=@!jt^RlsOHIR-{|J#JBU-p@t%uCb? zNfJ>sX8huQP*k9BP&|(vw*0WxV9UAlf>NYuD`Are;(r687=5rZW$rT5p4~qIPS_Mm zWc(=NmGAUsjsX4xymDZhCHUCrrhx+$3eXO|)&(CDts9yswFs(pzN}#E+Xt2Yl3%z- z!9`5A>7F=R91TzZM#1oe_&*O!2krG&4djbW_0DYG?MHQHu{wzSRtJt!I5a zm%Apxh?8!S@Fq6xF5b#y+V5FhA_X5pLQvygLA>`XuU~Dzu1I5lfWZpL4?FKw-Dxc!CU_6@ElbOO-;*e9zlvltJOT|>nA?) zUB537cgX=d7PC8d?`zJdsin4S2_)j#d7NK|wZINxkSAe_1t(@T-C(fhriuy1HfMDB z4;DEGVQ~Ai;{9LJ!>S#d1A0-FXzhC4dLbt-RqX*I*nAX=m0MwcfRM$EdcLOBU#_g> zOr@ud!rTE?Td{ZULpK>LyVZ1fL_ufTyLp!dTSkd9nkwy6k>k2E{|4e-3z!pN*v-9y z|9vT^EMo*Pn6(P3h{eR?Ukgo{-IPB|lTqMs&v(28g_bMVs{T05d$@K;s zU;62t&nhCXR0*@nabLBCmeTL-qz)ESFoOG>31QZ|ZMq4TZ2`xiG=uS}(wk|9loYvc zb?{esZqK%dWgovJ!b8#k#xufiKqjVZh28)%2@81~_b3=G+ztsURoyY;?nVfU!6_n_ z0=7zc@P^s&EcU0Y+IZZ`r4Szmc%+#X`=3zQa`Dqmngkexf(`b}`*?rDGK_?5ndbFA zCWUs((4l0nfKg#=W<5|@g&{eoG&TgH@`SL3t;K#KQwp>g?=3(BX#85?$b_v}<9@}` zi-}L$I_ceF;iR0Z!%XC~a0ChbA?p^uuQr{6X@FR#fQGO9j3Nb_3Rz3+x^6Af0XwdQ zE*BkF=HEg?@Ybr`CZ9DV#klKMu*nPC?dR6muS>hzzHqDFCaIrRuQySoT}n33aV0w| zcNf8kSEna3lz8u>*~C86TP{Xp|30UK=qxgiBTJXyI%l18<25*P2_HGuqqbbvjS}7A zPF7y`3+U>EjW|%tUH*ia^P=&?@m&*k!qTg<^GOunHx%4u6|Hyq)y zdq;$W`wTec-9od-C2w-QNa`Df=Qh%T*j0H}rx=Z>v&vpH#1-ChTXP=q)le&mD6i^H zoPjo_*-Jd#O+l&SuUJ14Ij(umboLuC_^9*e6Pd|UFChDN+FRAGg#_Ck4OQ5tZ=uP+ z6}F6yiKWwuN6vbjqxyAa9+u5(A~y$8KVKY^5E(ameyAzd_j^2a(0}Asx7%$ltR+UN{@|Wx83sFkI7wLB9B}iyhbAx|rvyz8vc97~ZT_NXf)nkoKRqUfe z-!Bc-vzL-hv(B!Y!>C?9jQ56#Uzo-NsUrL{A=^}%tAMax#mY(RU%#^syOwLqqkpC5 zu5l0Df11|zL{`u7aiuk7N3cD4O12L0q+K0jU8!{=4;>T8$5Sm^M|YQ0Mv#mD#PO{X z>Z}lLz;AhXklB1NvmgW3(8a&0UBNvUUr+)9YIK|+TOezpFpSj>Tv(v5Q^H3 zv>B>ubI>-D{mU_=z1{b+L1mz~1Z@=@V4ZB9*|sYEH2CllVTAt)+a0X2RPZ=a!X%_B zGUb-8tf|a0t5K%EuoKw ztAp}6FQ-@5xefF>#IBp0n`ptX&RG_OK`wFN3i#;tr`QrDHMMy0xRamI1hkz(L&TK~ zCgk=oVyie?2p6Kb#CSlbLs7a}sC)e|7B8S7p%qC)0K{YDX@$907!x1qvE_(-oJxn( zqRpjBdUCyaE_KT_h!!4)t8Bvh+d98{zyBJ#S=@iaMm+nCp-!!W5ZUc!4sGANvG+}~mFi|k+sEX4AJ0D?8ZG`R9ww>#F?K`caY=b;&Rgd(#MH47D%%O+w;vHUumwlyI zwD}Dz&Djug(h71e(La~pPv%q&tLLsh6>S5ue>98EzR~`aF2y7U^V^zjeABpnmH zw+kJV0tx>)Q{!X3ydCB9HS1wn2I2xIR@93>5W-JjH5tvb z^VR1ymmTDDagXgMB`5NU7A>S+7N&o@vjNL@&Ilud+2$8a@ooGJN2Q)#SViqR`!opH zY;U-bSI@5uUxd$g#bcY-_1aKW&0)P@AMXqA|e@P+^$uCPaX~ z>T$j>a~*j5mo++-sHvVf)0!gR%e1NPRxi5ZYRvH+R^Feo!-F(vbcvyh0Gw6~*sVB! z?Hx@yezhi@w5F3GFYjBM_jvL}rW}PPr4%y}Bz*X$<2`pJwJZfFf*#RIco0}wX3cf+J%dl$iUSH7>x?H}o7@WxgTi<&_11sqs}CzYh2QV@ zY5hR5p?N*y%qmEbrE|CJ*PCs8g8_XD+)o_%i(~mn!J<#q6ECY|WwDZ)uH%5^m)p%U zwepS95zI-eT19#{vl{gO4~ot`oaz7l<6{_djvD4rgi$g^oAV*3Id4v(ay}*JvyyYt zj5!lSHs*XjC4DI8a%c`YCv!*+<&+%i``hpD{juxXuJ_?}-;d|xIi9{ zw@;HzvO|aMiQ*5J4DO{d$0Elo+9PAxG$xUA1VQ574A^5q<+h3O2J zI6XN;FFZq!I}2n328oqFl~O${@OvV_E#(lln!CT6E6R2jMS-}ebbWSW4&Tz;);#{} zIpD<>8eZ;RgqxxuiQ=-)l&!XB@=qswewwhS{WQXcl^>o`JldkBuisRGU_f@!LB`@9 z;1bV(a)D452&)|8Cwh|Zsv5L!g$9w_Gw2tHiLDeAA`g0dpk6f?Jn`Uz4X{*gZ=<6X zyh0P zOgd-BVEk9%zg6l}Q0X3A$wZQ!LEphmiviU^A38#Ir}!`XzLc5|JNtA8jeyKa;p1FC zNTU|~mpnhO@3KaM>!$Gk0F<1krZUM3pAz!(=`$~opviVS*-%Ob>B{m>m)ee(2bl9Z zxyPL2epiO!Zt+-U%~zke^*RY?Tn&P%rlGKVFG=sasU~oXsC_poZNYnT%x`JXZh5nfzjG14I`yS9lO2b`5PNl0PN$$OD>U;?w*#t|UE8)wBw4q0g^hrcC8*fa2Wr zw6Gp^`rS4fQpjH9fV4X@7B(PwNG7t@9#BFX2-ufEF)Vtge6t-{c@=N|G4U0DiaBDV zxUHxudlaH4wOZ(H%#oFVz62}kEYBK6{PJSiT(8zsFl1Thm|B6&WM-mEs0Dt`V(;SB zTk`mnmZg&!EXKunSLG6>ZC|Cw0Z0!zOXvleNS6j%@76ss zktBceXoaU_dLEaz15-wexOJ2^YZW_GA_mL7QF51Df2k#EHRgpXZ_NgIN|%5CI~Yj-qs{~R zZ)X9}oRV$cXma&QlZtgtLxvCb?w;w+o$_#^5;Ud!ISmU0cbh&`nC|*9(5FY?+K5yS3PdsE##`bkO zXFY;E$NNvX6_PCUDgL1FcbWTf4}F~xv$O%^cfUuHXF30QOQ%oYoI7G2osYouKN97R zOwl|;-N8{R$ ztc^lK)&L`j)%x@q`HqiK;T=BvcK&-IqA^!BZd0nX1g^V?z;?H-Yr!q{d0c&kamrB` z)DY#wMf|0o;~jrpOKGe9ES`|O2ZEdOz0}=+c$^{0zV;6$=BYwTQ=?3? z3qq2?(u6@}Xts0rkA-`i&_qV1=Le|NhsNWRs>X;6IDS~dpAK@M_T%eGn9!$4d=DQa zxdcXMBny`VJ165q&Q{p2B@(vepi812n zhDmPWyy# zoZUeLeeQly!G>@gsnhXbjo{s_Utbx@(+E@JoOykv_OhS2ED}6SA9Hh|B=Jdie;bwI zgf}x8vWvgZg0S8u(B?aO!e)wDe277jKIr*})S6i_f>*K_PnMvS>@_vm@L$j5QNQy> z-b5HJ-v7tdQs%PkPnlrH<4c1Y-%!>jb6!h)nhYM|#dbO(^7=us*L^Z+f3ZOAS_^37 zLCgy7*cU0T$;T4>KR|hfM!k22SJ=X*Ji#m=u4A+IE;S^OD&uMK!aq7LCGzjeQ>l72 zvD)SlPPXV){z~yN!xM6Tm(71c2h$xhW6BfVPoZ)Ky)^t7z@ZO+={pn(Wl}IOgO_BQ zaEZAf`)Tv|#T?arv)^UpVkZzJloo{F{6!p7rm$^lj1~2SgDSd_$lME0i_i zKh(qW{A)eV@&@C)Y$q!e;SNj}3Gq`@Ay_P}0u?G0Q%Qxat#BMYuT|j?l#D}cQL@-a z<9b4Q?JXSKIRFDl5`;BCtlaeT#AQmZ<7^Ft$M96&LWe8AJX^>U?on*V#mc*y>-j?& z?V$#pTcMlJYh~j?D)LJzUh`Qyo8(YPG4?bcZRe-fs_?HJ6YU}{w!|d{Ft(VHHaf9* zN_q^Z@mYWYSARcB4rbvPKh&=(43$8#YKoxTSD|Kbips=n`mZ_qtdQU2euM5Vb2fiW zp|ENKrSl9xl-IeVhine z!~a9TSj4uq(fq-?2ft_(a$2BmC! zA;M*Zpsj6_q|qnkPZzQzsOxRuD1k2mPuMcS`R_k+2*?)x4}g1C#QxRgO)AnshB7xG@;D~2l#tEQ}^(+v$QPa8sTe7)=)q!Y|>cCe?p|$G-?c-8g09qMf6E9g+3zQDYyz6&L`shEiid zV%Msuqq2YI64(wnmqy;k;x@mMtZ;IN;Fa{pV6f!RJANbO?VM{7bgW4#ZvrFM(gsg4 zvy@`R8a?y7JxNIRKZIu}^Vj#!oo)mjB+~9+I{Y>=(=Ucxep;ig+Yb{W&^BHRgX(3+ zTfo~W{SH$j`yR;vWB+1zl`Aihk2ommAh1#e| zdrDwszf4vsd4gT`t6embM7vbtA92aAVB>d9A82h9eo*rQ^sH8`*`x1*wZnE-u#uFS zB(+-pz9J*;p)<7a5a9QB>7|0c_qy2;&<~D0oc{wnNboFs%51^(qOGbD?jqh2lrCoW$KvZTs6 z5EUs&qf|aeu@qy=B62_4dA*ZgGg3IKi~#+!kr&j3^Fs2Lk{S0RDJztxUM$y}edb{e z7pz{q9?L~&Py7{Sfe-|T*_NKP3D@Ymmc;-H!3%~SbruDydD+AhkfeSI=@3Qj{{ieC zc!S}}V(Zu`uVAR*~9+shKO%%^56UbXzL5H=ijl0uB(=T%}J#H?-3(?=eYBsI%(Jo85jHdqGCUW4?d+!{HM@y5Ele`RT_!L|?)$8i5B)>OW zN1G(mgye&u%<(!eHdbY>g+N}2<4M(PeV!+O#wH9TNe+j4ixvK;tXlFrN4Gsqtr%!U=A7@#&{yEY#vb z-l2)xnj`UzK9|ulrnYVhv4wb=#zG*7rw35_g1UD^gndho#kULfmVe~0;lmt?s6TciWwQ+p-plqjFev`Rc95Y zd~bSNntv}~7_)dp^JUpp*Z_(NI^#=66(D0kWT^P0?yvhjaRG~w&l1(RT3w1}ZpedY zu`aRkg!iR6GlsJU*WCg&UbfoWR}9TbedNqK9#yQ{d(Yzv@-{MFBwuzK2} zhxeW*m_ScwEknfq9vTDo!1WI{H$1Hzf=tB8m{KqzJR;$p4SNv1wl04++TG8r^JlNTGl384Wm(gxT3qhcxP z=(L%F9bof7WTbOk?;9x*SveJoONyKU4c}lC1B+qzQM|Ap0Lg>$75pH|Azh}oatwrO2 zm!1sxFG3o2FP#P=Cocwi*#|}E&clD;4!7wD!@^Sj081EWr{kt0ZJJPJ^d?D9alng2igKvy2b%0e@%QQ8a ziet2XgxA-_p+d3Bdppp)@;6fW#qko7aoM zY(0gMYbRB2bl(RWw5z&uO9HrHhrXkFpGG^%2>LA*|2jr{`tO?0ycBrV}7q^`so{Ry13#fhiw;TQsfN%?*Bn>ffw^Kvo5Hz_1B zpx8cnOiCw1Fc!t6D=9ujTX3@A)@(OpDdq7m=+szfB&~4Ew_#G0zzwnizWeL4bC`dfDulr)1ij0heW*o z3Vj4m5iwSKR*OIrynXHN>eq^H5a;D1&oRbPkw@^PB-hELr(Vxha8NBW{BF!-vP51v zk=NJu6WW=eE3tS~=~kNcI*TKMWG!VN$_Kx(*cF$E92TRH=7jYhj+GsZBUIf9&%$sk z)AvF-+!eEq2lS#atI6_>KDZvtox*hWLd&Wxu7B4}Zt!(Fj5{$1$;~lkRb*qG(i{Y= zvN5R@gpF4*i#cOvwdhMPH{4J|u*|~Myo1})F9|_-44IMHFHd;mb@W(Ml!N(Kch!V;Hee}3jw9~AZR*BVpz{@fgA zOSP1Hp*pzoA3((H8Ap5)~R%^C#G1g|*1PsBe83LI&s(NG8q!I4i#>=iLEc|K^yVMo_f4YHISyQP zLZ(VC^{0G3Kb%~K+S3S;Co>~5-LV`JVe zGO3M4^xsoWeM=SUhwBO-7}6!LP+RXn1>HC-UDTKVvjb$sV}m7^vy#Smv=qBWD>Ir>Iwq+N^fd^Sav<*Kl}>H6Hz&@lO|d`7dP z5s00#fJu5vF)c#H(w}{pCtVIS7C5H zQ>P&-$dzyL94)q9_)l~%%mXzS0YcG)ET%(nrA!AGqS8j}(c|x-jS_h->uEXIxq+Z5 zG{AG!IUHE%A1UDULQno`+NzqTR0-q>F+DJ9HAkOygp{VbhC`M_CQWt#lh6p^tRzL+ z4^la>mj%r1yqu)bpK^b}UL1#5Ab8SUSGO!Vvp^33FKT-w>!e5?6JhtwBr<=tf0;=T zMXQIk3SCv4kM{3rGf_~T_<*~Z4AL^>kd#cphx0Li)PPuiyx3Yq^A@9g!#A>`gN30j z2Cs`~54F#yn68P09vYTG$sFZnW>n=kT8wTvE-^MeO3Ll#bzmwyDyt+>w@^}aeVdg? zqU5jF=|?3x&08tHLBqt&deZIVZQTJljXLjF0nkEEyTeqGM59Z|3b-tRP$nkMnSu{r znbMPJ7y$DoL?qI|;t}knUIeipVh-?Xq3WqjHZXTbR8Z&!QGrx33h@pr0J)k*LIA+= z10cAAp@SA?SJ2E)Yo=69lR;QMz*>}HB@@4;121oFxS-7^K5kp6E8x=uQZhN;a(_XP zs31bbAfJ-Kbor5JKu6|sc_JMU=Pi<7Scs>ke(dSRX|g@2=X1TWFxL{U0K+s4=J7aU z|<*a|^plN;Gu51W+@92Yl^Tmtoa`uQkUvS-y88E6r12C$;)T*YTSW@4x!{cjJ{CHg;lR9DI z1G;jx2Hj9Fx{b7#%n6!L?XE&gSq)cpLJDRrA9`oWMmcBGwg#3+A#NhP7GCe2SyH}2 z@bVt<5{Ex&ae2oGrM7vM;&!ZT@gvOJra(2i@^*NjbmdL8O4$-AtKYQDvb@?BO4-xlo`HxR-b~F~3C%7l(cJm^W+h`oM5WT6m@jCi zx;o$|MmtEd6&)5TR8+@vjh}Zq@s*#?QRTW07N=DX=zF}iWm2o9#xR$-DYl3~>$gqquv53nI9(iz2liezJ(dOxFgzx3Uc;2r>Ht%KtgH#u_2b@K2o8hdpf zOt-jND`=8-sG#0Aj09wUhvs-&hg=oq>B|BVKtVP`ik;5$%q|IwT&^;OY|qT>8t^88 zVV$o>ukpTi@%>2Edy(bK)3#h%NO*mVsZp zXFPZ7LK8x_ThLjNeQv1BO1AL>)&ECnYC8?gm>Y<6!P`8Z9hC2M5`X*!xL05iHXCRy z8+~%aRq&oE^QhjhYWkW^_NmCJFWYiYf8ij3Pq(hJ<%7gS6iXSjd2wcPjxY__aryo0 zHy?PK99#o$ioEz;QFr9h-F`R_g_#Q|j0r@5%Drq~7uA#)pALoctK>3p{;K|X-Jp!M zrbgilnQZTAjcJddBDO8WNm{8`@9h)4fc_gLz7HLwsbJweqCd)aGq#7Eqxm%?c96lH zh%=5eD8GK0O>~35xyTfa{%>gNqY77THu48?Gle|#jkiysCAEZh{%iOS{$=pd1H7f_X_U7PA&-}m zf3w$_Q&p*ytikJ5Em5f0L*SR~doQl(k8OZ8peMVABR$z4NAARFp1Hc0ohyjRsK(rW z=H196M|Z*`{&c;3%$6$vk89as!M|C(;Q+xF#=%fmo^}KkqdR&pXiVwa-Z}9J@d*6a z%bcyKn-j1aa|709_4d8??|x|+;P88DDQ_Qs;&%Q4HDj>gNl<=A2zt3HoR_I=xR*6x z+r-11W&Uf9C&w#O&7mI(ck>)s_X+w;c?ph92Uii)g5&{+D-(FAS5hR^0P!QV@TlU> z`4j2{rD3wsva#1(sc3dAlA`pF`El1TxL6yO)H5C8nz`ssdY!4Q*Iy|8 z&VVW&a%N#b1RfM}7kaevI)v^-7zOs7PefvDi{a-5+6#}mrY<(-lOxwCk0nX6JFA(Y z9MJo0k)jU_hmR_J#Scdnk>hsJ%YmlSIpo}TWkLS~{2+nS_DMqwj?oh7oMSN%#I{j^ zDb!3N=Mx?|DxCEi8`N74Y@RPv4kn*ZCSD4(t*8|(IZ!BmpN?CN;mCUZ3dQnMcR;24 zHgDD3 zn5Z(Nt*E8?a4Y zYRb>gN9Qt*MEsTRui-XR$^Unk{Sf>MAk@z&b*OSZhnWgiV;2ku;vxldFkJGCHVYZf z!#hu(dJQ$Sn02k;^)SV6pZ;yU_%1O&n=Hm%L?r*jfV95`0aar6%$$xY7(JgHJ+847 zwxpyd2UZE`Bh>y>`eAghMg zkQn+}D!*HgPs(3YM8|s7ym5uA?|k2)BJ1Pf8h1=d+Q%i4{^XddA+hDvu3bn9Ar#OT|ByP{8aGFO8$FtgOnhv07vVpt&sw z>=L6qye05;R9Zx(MU%p|kxgkpQTFt zYc-Z-h^fNjyR;*+be7zk9mgf7&nIeu%XW;>SL9$;lpWY&29!62@kz|XW~Z7cGSrz& zugZHSa%&-cfX^%-1bnHY6&0b#&rVQAJ56X2j-?4Oi%lQ{CU*~Op77C7z@Ri#g=?{i z@a(pCaMdT)_;hew)Zb^2L(_Kk2O>e&MEbGV-?bi%Mlan6ir4QCe&Szx>r%09FSW$S z+}`-fxWji-y_E$ry`7A8(ptCQ%ba2*Z{fmMJ3X%C*W5)b2XB<$@3M^x+Oj&|ASQe} z3FzmJ%$jU0^GP!2?vNyzKHgt+4Hljn$`1u?eubZUXe$f>T!1s}){3$#6Y>f8+SESO zS1BMiE-=72id&&WtIasI=jk-Hz1B+`uj?Zi)xkhFswj8`k6yX))_WIlbMY~RJa}C7 zST#c~&5O-!$!hbUw$jP)0rEco-6sbDW|~(wtjt*;|M6dVX8C#+=sB1>3;-h%1xwh6 zF1*}ZpS9!%t*^xLgJ_GCB=3uDe>dwys&Lf@G2!Lo!g|%KH*;A!kf$&2Foa%<H6W**GjWH0NQ*_o9zKKR$1Jk?OLIghy1|h{uIO~N z`O2c6(X(nt^^ox;5J8%-(k9zzqs_d6OL}ePRM=tYuC(n0c~w=Uu2k)sAT5;`4r zopj%S7!nP_hD7 z)^d$^GJ$DT9$aGa7Sy`!M1*AMRS>8G{xjf)v#!ljhMd3NB$oT=wLWw0h78xB=RAj} zyUBN>wP41sztWdOjdneFJYtJ;Qv?mXluTWvbP4gg27bo6Y!kBTt_VSz40c7OiD6oC8UohuICgHdB^H@pD&9^J zb7f7GysMT3SfUX)0x7FdV~T3BCG5N_GR;mflp*_Ac44u4pv!_=Yo4Bmvio1XXq?8`(To>K z1bHJ13mjCR7L1@=S!4#K<>Abxf=e4LZdMOH+;sdPG>Fnn0U#{FN846S69z0a%7jho zkl)o0)>N`~SX7SlrLM~+Ipu(m!1ckS(qin6_?df|cBosDys~h3xdKNX1HPa-(^)SR zxmj!!;)-|}Isu0lU3#{A}JEL?DIzP+{1dBZL4oehPAw6<+UJHD`0z`t}N&-(Id^y3di+JFfRk2;-|9H)12#C2uLE)CyN@K{% zyz5A+Myh0?W)Hw7O!~+8IHXwXoz{;aqjmBRFL}c?%CVZ4tcABK!Xmc7JuuL#4~_9F z$&UA{UpLy-mn5kO-&?EnGwmp~wPE9PzeZ-V5>;N5PCcK0^`^j-1M0wY6<#tKNYnM{H0)3&gN)|0hj~Ltk_DQz*p<&IVO;yV z(gXcQY>pwr#1btN__rCX`Bkpy;1y&EtDQF6CV5M_4QUXq=8zc^)c6B2c zp>71(yAL562U;JM*s>K#O)Wyu$# zlxkW|wpe;Q7C*R&VGiXfZC^R=ziYqVGX$#dth5>$c3?~WFA-`GTt@zFaj5jE@-*_7 ziQM&Fhc&sMyQcaGQ9@)qA^ZB6n8RaseEeUin0xk~HF)WCWh$9?XzkK=`I=kE$+(~w zS|mUF*>lNa?;BOJh4)9!p-L+U(!Jnq^LD$j---c(g#jiUDrl}iFFw;C?Wxf&Pg}il z2@?C5{x@^-MV0Na_0V7i>XMn(-0*M(BcHIcs1mHlx4Hl zWVD7iU`sE2EgBwn0nKz$1B~kROwI1GFbL3}z%y?RtkIczYj&&>2cX@DyZY!(pO{GW zMn)m*&rBu%qAtT!NpLBE?^+LWDYaCPCLbFDhKy<(3`9|0bU>_q?TWZ#HOwNF;=3a*-D8r$$3^VegBh67#0Ucodu#yy3!@`xIs z=c;M+9?KH0*lw%L-Q%Hxyxts}zOl70DfoBB=wm-W-0n5xxT!8wOKo)iA-CRFqeCYJ zgL4=0L}0bc_Jq|3l5hJ^dg7&Qw)nIMx}I|=-^afls%pH|^%f>hM)fAE6&Tsf+bp?< zG!k{zaT|@KkkaJ70V^~0JXJ`5wU4D?DBS?qB{S{ga;pjPYGVXX-2%>m?xfN7%az32 ze4=EUNjy$$(yA5TdKgKms#Bxz*dh)YTy zsj9Jk{J7#L_kiXW+Qd6g(00!ud${(dcQWCO2wCBS9Dn=-+G&MsiPe&s3t{^{?=ZJ)`A30S;{Zq z#Cko4m)cv62SG?RWm+-DX)Y@h-Iyo8_1?iHYYS1woww2)(*h4j0|Ahfcw&aE&4u^j z`^=d8+>IxOyXLhmDAiW2bzGh*E9yizM}X_-UNEACJr5szBbt z-s~X*IW$mLtViN(_u~fR@s`(a%~36cdTvXK`!huoTADf%{E)CSI+SzKqR@W!zdbqq z|7L2^>sf1i*uIvQusW6jdk>1j9W|7L?pCu_4lMq%q113f^H*4bvX|&43(}mD-E8@U z^jqoWeHVukN93$dO}`DFS>0B8!f?o}HOW^S!YV%6<&i4^PLeDpnTM~2$vplq05LmQ zFyggHxn-LH%93yU&C>1<%9yQ8sR{E}9!x9>?7^LGR1dQFU+Q#x?#U3S_Ak36LoBZh zpfvfx195WU{rP6bPW2p@g`o#a+TQWzQBCVBx`Cd9is8bwhFX=c*?h_hFdq&C?L~D; zP-}bYKu_usd2-^#>kuaMPgfnOU$-mOj5WvuYp5N8gCkARDMU<0hhr{J|Ftvnu z1ocLu63z7{0&oGSgY_ZTts%1b2ZC)8@qYkLjYQN9&DpH%-X1mYh@21W;JZ)w#51vB zB8kcd?J+DX!d?`qg9X6u7+rZxZ;$w{Se%rAKu*=H%?j|iyeVFcPunUNDV7qE$!6|Y zMJU;XcRD<0>rsadVva~|kFG7@2OcQGPEk6+yQ9!_A9vQ!dIm;*xR2Wq2q+@g({nP) zlAhXT-X{$EQh_9Pu|1NQI?cMR8u=GGk)>K^D3nJnu7!qh=B)*q&15gjX=jOPMBOSZ z{+JR*uORFq8q?)pO=xwKt-H0la4;0}OI)-tN(2>Sszs;y05LS?c{m*EZcr3EIQEv4 zBtyL77o@k8PHfNAyXtj{7|{HEHtkgDfTb5>IPP<<8rl`Rd|TC#2X@LaHLd_YQqSrx z6DWUK`%FdF*nd~@ZSc%H#K&G1o!)t7$^B8CPFU)anwJG|1a{NWL)tqx7d*tEG>u zAF$n&$7os5CZwCgceLM@{RA{A|G{!xo_H1npEQAQNlC&pDTQ zBHi(6rCYO@qTDDcHBQNyvfT&$?o%{ z#Ho29Nn5&b1B(>sY>6f#g2Jj6Q37OOTcOUpTF!;Lr_@VoY&U)!%;XRE+Rz$d`v*G112wExoo#k z;ML;vK!1W7%#1zlS*?zUu|PU&X7~=u49Lgt=oN%(nL$!{uZ<>Gj_E7PD*e8IqUBNP zQNg3g0l-M%W`Q_D-w2->pW!w5NHuEh^p0b@Ka?1hC`1c-jgC~Ov+zYjxQn?(bQOzhY<&7dv%Gw=ZvF-FZWBa{DO3XgV2JzVsLkNN1*`_1v!Gx9*R{O9j&Fa!JIn(JoTKvKHi zEB8SAHZ3RYl~t$FDs$2K^{RSlQjMCYMqM%RR51d*d|CN=Dy_$L$1m4#PAs&`T*_{!u6u*^liQ|`M6KS9`0w=b3;v1N z#Vpu~``2(DCY%#-CK8#lcMQsh+`3Z5({KJ+whZPSwf@W&C{(e*IFWc>r(Sq8`T#d0 z-a&g=&rxlL#2-~|Cbu|Ua(al}oB#T}vXuRYbyK?iJxyHK9T$~1Ylk+H&qqyd{GH~> zT0CZ+KlVn%d?FIx{O*6qvzuxjcomRo@`9JzPGGiEypiA7{>-dG2s)|x&w6)3HlS55 z@(3YPd;b>FjXPm*pXMuMpf@SW-o=^Fb|$rb?)MU$jH~X%7q4UPqSlSBI$;}Wu7BV5 z%YAhpo}jXv6)hdN(Kx*q?DytYPAeqf@GUN6L>t8dTS@eJnfY)O?iGm zrk>up>9R)v2ub@@l3K19x*aOH*3r=Wmi1xH=i>FWnu_g7hMiM(T=#htrob8Jk{-ys zGF9F#lrN~?2pa7b;>1{FtAq(B1npvsK%>LA2+BvB1<8f!^s({NX=}lxQ1XzfMq4TQ&1`yW?C8w{h3O*P0SO?A|FP|mUI<1?xGvc2&RDS&TL$fEr zB13=MJUh*oPmBE|3QdIa81!WxxbSaf+WENOePx@-+7+2J%C_hh<3pW&>TNp5S{krW z=ao17VP%t0=uB+UFY4hk9Qrw*B?POr z8kEQn!Qc=YYZO<1d8SCmsY(>p%T}u$@$3raN8QyHS6lt#VIIU$LR&HGtHl;|L1>FW+oUuSlnC#Ep<2+fnlT0J z(5;Kgj?ym1M5e-u!by4P4|%A=E%LWGm>#G46qaPBMr&RJ(611r9a8yJ_O$e%pNN+) zw%-2cvr%X^E)XAy|5?yEU$xK(39VM8by3kQDsSRYcXUL4a?sKq97O%8%_)qt-XUNu zep|OL#iY`10Vht|@KBF<59FcYTNV>@G7VaZm3lA}3p^^)Qi%IA2)@n_N%8fES{`0h zC6acGUnU+^T+RlnvTAy&rr2~w$#4xHyaNGSS?|4KSPQKHpN^XGK05Tko?C(MwYy5| z1<)Saz5NU{2({LPi<3h75!`=|3ku(-q+^AT+)3;>1aT3>`~E3AfNiaC zQan!tr3YV(p|OG+|No$^fLEz`{b9hwp=Z5SKj|_RE#u--yiO_um3ePIXH_uysjGr} zzgd8{rNzLGH!2)lVofejf$E^&Ov5W!%>yipo(~5o6@EahYKr0gg4afm6dyU?AL%-=E6T7M>odFkhRUzr(lB__V$YgApGBnuyk!Be8(DU7 zB=`D69oM!&@3L9+aRhd~;ZeYv4`FWKEUBQ`>Bs+AVhn$$z5=|*A+}9yZ-^*x3y9?2 zd`9vJovTVQ=mKlXk-mtX|#V(j+D7HL=@;=-%+U7(|1XX@~*hy|^fQ;bPhlsmH{ zwBHJ^!kfdH8)H_-4o$BA)h1(@6@!9p&J@VMZ5W@dEX%%xL7F$b&yo2q9ggv0sCN9t z0$v`zo~GtF}^&R{N|tBv=- zVC!^hvT7L2BeBY1Qy64bRHkvv(e?T;K71INSXY)4-jl7p2^Q&l`Y+oRyyBJ$V5F&(nM^jxBh^oO z)>3Td;LbWlRY57Wl6fR7Yq_?{QPs<5H~a3o9IRP?6kY2$5>84V1&YNCXj{WliNdt1 zm2HY4+`Io(YPacp+)8JwL7B6CWaVat%5-JcsK}lJt=yJ+JufAf{dW?*Xo47yqRP=L>;#>KnN8JbabD`py$ z62qytl60}BVZc+X*5U2>^r2;5$xpz|0lE{iQYL5C0Z?phkH6>4YAL3WV{!HMLDuy| zL3?t~ch3&~jS-ck3?q-=Jjcs8PD;UN{oigGTiN_9)_5E6(KyLO09y224;MBQyCI+OeVi()9LE(6@6lNLRtYc993usu_1P zuJ5HtN;2AaTqs*AR1eC_pE@h8!GxZ6{||6>#2jJY7l%gs>e=1jkI3@EB*3v`oM=8!8s~n7#0dnhplo$k}bg1v_Gd zuT4MZ*~>sms8f|T^RKItUbOs<*I7eI2QhOE}C#`sQA;!+5USwk84|Oj1w@me;J3*K$8rl#sq}Xy6Uyn_(1c#w4s3H>W71BqYt|@g}4rwzMSS z2_D@rmZ^itslv!ZLu|-4t?hbqCVK#x=ZNbp57bBT7Dq-iLkfXL0XzD`PUwUk&r4c} zpW50TvUCH=pSAJhl7*kGoP<>*?lh8zskO+%?#lA+=Rt>eCA|Y%m9jZU=QAF&XV6Dc za4pmDgo~*&Zl}3^5tJus5G4z2?w9ba2%t5*&{_mINjDIdKO{aB7;n}>U&pdb7JzDn zwrGd3*(%P+P^iA0o)~iUDvynh$(;fR3N~z`s8{r%@3E-$IO?)s5=iaGkOS@Yh4g6# z9+5&bln6BJzsBNEEg1l2p#7>1v|eEO%CR7JY6t*0qqV2*nrW+??d#Yv+$RwGZewr} z+lHNnh+X4=twK7BIQkV<9L57vssga7T$`jn#9}uRgW?OGcs(ByilBW({2JOTqb~*~ zLF??`tv(6Vg{lUbFD;FA=;SEfjW}(b$D7($2oKiEIOz*Pc_Hx&tt#J5TE*3*09V%j z@p73+%fc{0u64s#0nX|FcoWd{QBw{JcSY>7^#J9s_qOK=*4ZN#KcqG&HS_SvU#ZKkKBPbn#1S08IaAb_yy73eWooO(vRJdcxUU<_RzZg{uiP^I z|NJmaYn*qVl6i*yU8$7P-~!L9aK~L(7GM{~JY@!HpJZ`lyV~tI>TF@8L@lskum6vt z^Ny$b|Kj*HuW{|GuD#bavUBadU0fqc!WFJ$T^UzoldfyayynFvLWD|@%(!GFD|?Tu zq}2C!fB)aVK9BqPocH^j*Lgml&DM6`>n~>EwNsz$CU%Yb@!(K;s~P9jr$z(r`%j?Q z(~0MMrt0G~Md9;@*(LA1k=Zk~ZLL|4xAg>na)yq?)1@_cFR;`E99L()Flh-0zHJdiV&Q|f ze#@jxUnO(aCU=a!9{zkh@R`&3`oXgf4VT5Co(C7|A1kufb;r0oT13dZ z^|J?Y7lW|V{XR&K_wE2(Ob9{sPpq)b2D{)U@>{6NZpIhG=Sv4}iTlyawWdjNi*jh; zhAWwpz&Rmf&XA4kI5@I@9KN>_G|boQp?KK`rc@ z#?}oEbEDwoB-uf`?g0W_IX*lblo=QL_Y2mmSv+suvK^GLACMVN9>8!CeBKHdWstQ3 zHW63Ss;d&Z$R36DCNZ2zJF&WteVQCX`T#ZkM0Q+7jC~-`o*=#Y){FxKMS!oL*x4Uw z_H5Qk8!>;>m){C&xZBc}!O8M)!x$(7SBy#~NMjowDBp;#GFj4-dW+02CGG$RwocmgpVBWHf*tsXxxs(e0{sVSYVEsl9l@r9K0Y?teb? z7@LZEbH5}5L^*3?V!H=#JrzS$A#+17^>$({=?>geXV*`3CD4)6{TlXcX(i1z;7c5w zXKM1fm}-;s)i$e4>{O!Qaj^r;ui>zYy(*T)j8>6n&#v)5fMkT*A&_ZPj=s;DSK&b0 z8L9QgBeo*P@w2<%;N297q_KPM&hn zjKv!BW|rX|pNZxa^t)(ek_9iw&HyS#c)ywLaoKQX=*cmgY5Nk-R*9c7rHtz9pFoq8 zNKZaCu(Mjlm<>X;cElVzVm+UJ3MTf5da~)dJbIC7?T0sm)~b8w{#4;b2o_Y{cw_Ue z7w6M{?<~&^DWJM^9mscih_>!LDd~+EWKh$Q+Ddn(h|PnH><;&8X29*YCdchVhZEmT z+c3*lfj0EkN}UTiHfd>E9%{f8i8m#|%}G>52f z{R;8_U!H2Xhjq~a)pO+84sLyzsbg^qgaahvoksVN6^s^f?40eY;N!u{^tZ9u2k<$& zk_B=D*D09N4%H=d~{sh zyj8Pi6t^5je3B3obYwL+;H+o_&`<+^wBUVIDIuKkqd2T$85USW)yB!~nb}j3JG&pj z5%u%;q!aR_Je?HXI=TH|F2LYau9AKX{G;koHNU#u*RRTrH=Fh&ZBt#wF~|l`#sz`@ ztY@ZJDqdimJ0Lpe@Vm1=GmSL+4cDCgN!`toNpOCCA~E8~EXHRPAO|B*0UMMVqQqld zCcGyJVgh<(!Yyi6yEIXryVIY7>)@;cKKLeZE0hl$X>5HDli$S2Q_RdvqudPH>U`0F zZqvTYYW@vU>*RkG6*+kk2PaqIejV;MX&*F6leDh3Zl6-46PknW-&PIe#a#0@F4d&cw`2F59b5txgV8gEoubFF^Gh$F z*{N2u9RmdmzU4&KHN25d0IbR_y0u-o9V#p$TnN-cee%}osx|rxbup|7b`X%IUd30Y zqBud@ci4)55{xg2KDP1a^^VQi@b&JkJv+&>9b4fGVlw5kZA8j43Nxu>@isNvf=+K# z(4(O^gh0N}qq1mG8oW1jD@r%FsBes76$WgrAQBB~3_QwlexX0?{dd*5(@t8ekOZij zV-IQaD;2>YOkMbeu|PZ0;_djUnfOh<8j+c7E@h{%sc;X}YUP?5@j6v%-a{r6T+Rw^ z>dUC)@IFyq-^CinK|rRTi?{#P}3`8yU}gLl)(brb0phSpfOLu!Aet@ zKU25Z^KdH9WJVOx+ZcOWD)3I5@nJB1--AdEK84igCnJm$g0Cs&zltKej0aoPOQm7Em^ud^-@AIIJ%=Q_Pq-|&UZBt2<{ao%Hyleyv+T zc%z6uSeT)Wi z_xqCYGvdDSx$AB-_t3&;mN>ofw1|R{FHV5nI41Z67}8< z+LK6W88czwV%F~1Uv@6F?p${dY0b8wUYU8EKHZB)lVDJT%%(KqZtR7;gIM#w@QRy? zG-B_gw#xS$-4aExtQPEj&-gKCHENd`0Bs~mO_>4&_ml|i8RGrx8*Y(w{}Dr7U={B= zX3F1QM<7Cda^>Ov2#+X^7GpzQaCa%;q8id2_{p=;)Hev5M!F+d9E*#eD2@(4ew)5w zN_VlTsK2Gj5FEXEuh6zFhw1&?u6=c28MgQjL!RMa4;LS*iK&h?zMa=ISdv^` z9#53zpS-)~7Zb6yXPuVk6JKo2ul*QvCc?>I zt7am1ap1nk&*>CSo4;xdPw-MdYUg8%De&PHT#x%knsU|7$7rh@hu1Qca4=58{EHZR zMkQi?^WtGwT^X-?#2f}QT{P>+Q!N;ietJAVQ|WV|L$xusar?8KPZ!-FH3+mtP{vue z6SSHNdV|%-wgMWsG{r8UK_p+@9 zlrOEx^>I9^e%ADA>TV_PIq|mcSv4r#H~6OD@tH853~M73HA}=NarqZSs^}vgU5Uw# z>T84jlH;^^_0(_%lgH$yZhFV47P%!|1&SWw^<>+X3c}HEVtL){i5f2+3edpS)BB4a z1V@>on9O%?Q^mYR$HtBtliS)&JY+Z#V;~I`!Re{CtBHaB^SRv{hCegX2biKm^{;nPYGHq(A>qaRjZ z=7=!4&lKSPgdy#@_F^sa>r4S2wndxJrd%}98+wY%KSZr<@;-r5ZPoUPn^>Yt$z#6e zgsf+8#L^;28q;xQIA68@k97aiSlmp@YUYp_Esjc?2^NHC;V%IoyAUJgrQo! zEfqyCIL@1(?7jFMJF|dJO@i$Ql-E|_qblEwSI|S0wxd@!qkW~9TEipdJgL`` z*cXOB%wQs~X;jTbUN0nG^;6MwY3Dk#D6+4Kr8erxcGtbKh|v{{lFU};kd2`vGpai6rrdEW zfQ1Un{h&`?G<`{EJ2EwStbcKsD`sen_m4wDZfIrR9K_o{a$H2*r=W)I`K=-iI~1ws z=+L)rL8v{N>C_EbVRk$Gt#4E4x(4Lq-8Ve_=1r2Am72EU@7VwT}}IY=+tw5gml6s3!=+7%J<_Nr44&pk(afVwu@XXu8{lI z3PA$VRew&MrRBDZ1{p7?1b2!rY7+trAkC)`Re*c3L)y#IcdCCS*=~(ysm}e;N`8#_ z^5#(o_L|MheqeQ^-TG_hFgNA+8r~>hDQtmW$5nDCmBiN_OT({q3=xgy2V4@9d-f}A z3!qVkbykPi<>Q_PfJOhdKrJ=9qBJAoZ*PjnA~&p|b00^x5OuMqq`+`d=R&D` zqUn4wn!HqWIlcER-|+tD1DkmZWS2pkqr+m7sHZ#`4dq90Pu0AtYm*w1C21+xz6G~u zW`@>b<$#!iBqU94jOJe@U8V)T0`vH8E%ou{zK#Q3f-x7KO*WQsi@il_1nc=FMvyAtb*ZOTko%m*XDmu6?Ym?wdv)CXU=w}5gVy40ruBStP1sX%Jv7@Six2+9Yu}NH`061^0 zgeLPlyXjcXi`oiwt3QDMojtbfglY=s1CDbv>gVY{Rk@i3`PJl9R!LaJZ`Q!xF;97b?e$%?FSBp-7 zj!Xhh_A_%O-( z4UB@`;YG~eWW!r2vUT&0Gnske=2a9+79W~(hzAKm z(WCH8NA#U!2RxDa7~;F2+y&K^$C~Ok|ok<6UbI*|P@t z_h-ycxQ!t@d**dk*O>fGOO)Ve<<~cM;3E9fHw>KW>(dT)^iK@}Q51bb4}x}S(MvT4 z4qs*M!ievyzc@3d>Z{cRSqaDZJWZ5;Nrsv2GZ{1bbKcOaHZNx2F0M>PsMV6;P~!&==C8D~RgrD97g%HaJ(@J$Dm$AR6-KsKi z|8kXmdOFu$Te*aZW#1tO;kx&E+guYrs)o}&NrtUWlsjmX|84_JWb<5Qpf^)2{(O=T zR1k{t2u=&gk(y>Xj$%@T^)=r|SU&7o!)vfP#2t~CP5h_5q}FikEj^p)sWxZ#C^NB6 ztIxvXx8KwUDneVEi5bG^%*j}RQa>1#t@%~P~w*?<; zE#l_FgH0^!VzInz^T!R0;1iK2%7-9hwV%7b9j$pm9W4}B(3-2&MuRt^!ltS6F8slC z{O77u+twD0!nrvS&2cP&n9wUmLhM-2k6#SY6qvtyfpgCynZ{f@H1-d!}HM- zfdKvGgfDXBbgASc#sRv61adsf>=+l60{yL3#(l#8hJg7jfsED^08@WDc>nmE)<%# zK1fgc4xheJD4LdZM#Uwe$>10BhBEVz8VQJ+OCFS@Qm4qcDY;XqFYE0I>RecSDk1Q% zuAX;;pfSm;E{#Sc@!xhAw5i zyZ|#QfkbT;8tPQD!T#~^--S8%-NJxCUT&GZ-iKYoAN;Tj5jyHQYCVvJs4m}+st2D1 zf#j!CBvDA7I;_W^B+h65KECCNX3rbY>m*^Ke45xx>WsgTgKnHsYJYygwDO2OPr$Ea zWIDY2C)7ExlUq*y-^bRohHPsXPkZ?6E8cDs* zTpc6QuI=fiOR)a|fXqS7rvC$kI^OL{*W?a861nXa%^#NR5g0COf zg0f5=#VJ6zMvWf8bnC*@`ET+sI3#7bHCg+O%iq9tG1_GZ*phs?OikNOjR9LrRUu-b zjS*b5G1sY{Xy**bz^xZ|z7ou0_pl5vgV+l6n-Pk1_nZOXb_TjfS`0sluX*!&*3W+1 z+m@xF+e{jPm`nlLR;r^>O6hvJ6YYm@aoTOL{x3;aS}5GJ>jiR4ccu_YVqjJtk!q=! zx{)e2962!Z`3NRzz)np2>D*+KO1v?GLt_$W-k1> zFtnKhsHKShssbTlxSN8kmWyYK2X4GF%*31U)fpqdgJ<7_^qF=~Db=x9REQi{$^>Qp znj%D&_7}a<>Zsv>7WoL57F9?2uChEQx4-OrrwJq})4DsV{kcPDWfjFgwRT-Xs@Q;P zDmDzM+tgI<7l%^y{{1ess||hpeE^4;s^h!#vs*vStr1OFJPSdgLVA!ha(^_#N@M78 z)Dph+McOosD_?V+4elB~;M_6DBN(I5Cz0LC)G;=boigPt!ibY1FTz>VnTY4S)TQwn zy%o$J93?rYfP)$cw3(1MWC`W6EJN8s<0`ZhN^M%5siMt!N<4c;*H=SdGTfqr^K z^e~;>XnGgro8xbho7Bg6eKDhQCJ(`_ThL7kLlWy#D?M^S1FwOXS9KZ2igEUdBp7F9 zVs7GynYU=tiUTthf0TlwM4^(9O;zkKv}O8V_QyFrfQNwd3+3)_*=pnj)-Cg%kf)r_ z0x|Y6>uWCwrp-w-`D@s}s7oI5N^ISP2cORXOJ{HN^nO^Z=cQc&<{iP-8fXF8z_3_3dBL43OB^^Nx?pMy0o*{9QF&OQu~ zBXiym(r74ZsFV4g|6%4!^6wfPtjcY&tOI--_)<8E$ciEC!vU)Adx!<=HeIXUsox9$ z&m^OKXaZa2Xa22;y3Y?cv$MJMgCE}4pG96IPlKoU%cL4mQyLV{qn{+Y4E~@a#@7~t=k=a{t zW+f=#%A|a-&*_~>j@*nbuCwkgqjM(1{(>mqYS9G`966`at)YB5eWl_)UuOX*735uH0zSmJU4E;RvhrG1~18PtKE&^HHbB zICs?A-Ot#AZ6nbEFGbBB|K`_bLtHwf8WVst2(QkN1|HN742^+s9POC-n}2S?UPH#t z+EGU2n9^?0n66{EMKTLGJy&|Vt2^!ZM>2peVb$FQ8c!0i@!w%*W%Qr~e>Eak70x`t-vx6j3>DkGC#WCiU*Sd`*erO zzxmVOY$^~24(&$%tc~xlyFH*6`wzU4bk~qbaicjg|-lG5bb{c=$vEP;8+NIlbDEKyyex)#gKvjK}X@>viQ|N6Z z)V%k2OYI{f5O`D6K@mL`edd+bS>tH8FsHo6m$*uv4K`>-hZx}uc6A4KY^f~pT6^|h zRvC+^h-#BP_^yv`pE9%0S)XK?L89zUO~g1L99&Q(p^5N6F9YDva~a1+7G}jD8-=b{ zI3`K5vIk>Z{Ak;UqO%7kkR}=Ry;o20tjZ2ITZZg7tIq6~_u1&A!u}+z@hXg!a|$xl zOnJl)sBLCT2&|a$yjIYs02P_?I3=l3gZ_nVNRW*HS3Armj~U>K5PUKjVn%{TK=@lZ zaBb`WPdUaDn4=~GI&QgEH0+|@GAUV*=M>+HsFBd}saVy#dztYUwaj4fIs0e{m%G#8+~| zQL4Toe9EJ0OqrrjYPH$BlGF3%OIy>RiMR!O#LdqR;QO}UToB+>Q?R{gR#&jE{g`ER zuHOdy$YaD{qo&l{H);v>ZLKirkd$9<_y9@#3srs0i@E5t7+ACI&<|aYkv6R?tbgb; z&`7Vv1Xr*zu565)E-RJOtNKE?Syp82o2AwQH|c^Qm%SS-<58n18h6qNXVB%;c6~qQ zFRCah5aoEE#N_kw+MVYj59?#BL@3gIeR*s6P&?!C@pfpUbgrmq;5!D>S${4r0n&?i zq9F38HTkn(-hgeNM!|`4&v2gK4cV_+?{m)e>jy=CROz*~b5j52e#O`N%5XxQRy{80 z(!PRR5I76a<95}r*c3qX`H$#H+HIjc9+?GB?y+-~OZeA=<@Zq~PR)P1P}}w>t#2i~ zk|SnF?!>V%GmwS0Zl*)B*P4#``;)R#VabopLt^OcUsL*!4Y?tZPvx(t9u&kNqmy|< z@5~|USa_V=X zu{tM7_cu2ZJ%+Z^O!5LPJT7AgIwSuByzq-9p8&L|p4$=+HSBjLDjh~O)GB^*$Evr3 z3#x%N90yjfjChzG=g^4j!^NJ=@1|f?;?Gr*J&ZHlD8?}p9PhRu)hw91tuFN}6p`)g zN^mi2hO)>>%AZxDM8SVKA2(vSGCH_KlC*Yx*n&E+_;60nTBPuF%Hr+(msFZTcl6kV zujnRP@+9eh9>5F1Y_AVqDC9syWRLdtZ1tmUZYN!TjXDTE!ckF-BO81XzI`xR`}YUG zWR%()b-3A8;9I-CVLaI)z8M%6j8|_A34MU~b=K#FWu94#3x{bDD^{Nh2Bv>j z80=o0wZr{QJ7s;}R{BIrNMCzeqU^}R*9lbLarW6x*}A+eh`pICY+P%wW)MDeaeGwz z)$dC}wE1!==J|+yS_z30UHr%Xl_7{-uZcfdyl%|j6u{Q*&m%jNBFDKJAZz}Rr}?}V zi7MenW%&Q2`wuX%6vMgf_(c8{)KCHYh_asehfEOThk)1FdIEeq1P&Awi9L*;DF#-^ z{cpMP_z?#ZJ#3WfhG3e#9{T}20jYMBK2w0^;dvsTAR?z|d{S6bBE~f=0cy_ZNGr^@Lz(>QMtoI@={*{kT+P2Gst4q!*>ajrU#fR-BYg zTM*6XWuC^E@#4c(r0cGG&{`0IJC=|8W2nVKmzmY4>Bc%vCREZkLl*ij+)i&jJXj5R z*h#nHQhXBhPsKL=)4sS@uF{F5>k}RGH>$ntuNjinsILA4;3c^jdl*>cD_avXI`?%5 z_l)~TZVY444tTeh+=uQ%%NQ10$9Um^jvKDptuZfaM{JQ#^%f;4U&*ceY@FDd&3}oC z+TA!Kvmw~tA(^nOxp}tVa;u|ue{E@56U3JWYYA^9obZR|@EJ!s#cnsM@1>-MoD+SM z4%O%%K(0|3Yf>)b>*?rsXZw{u`V9DgEoXVn{V6>P*;W681dF-(Z@d`P?6bM8%cJ`r zK-1=}f%NMwx5$vex@gNVs)$0vL8gJvZ;$KQ7W~so62HB73BB5V+AMnMWY7OMFlZ(r zU(gK_;7Vo^RovZp{$S`GkfgUv@&8~`qsphCH;Rw@I%L$i&b0pntmryn_$KHU_GTIR07ZPY~_lX)@r{1Yp*#R;%r7Z{0U$h7Z1f z<@GS}`TAOF=9*FO@GcuX*f(`?jAVH~{W#+Bzg#Yv(N3K8$&33> z*s4VS^m5u3;Egj$w{c{S>?oqOrczzV%)sra(7;H{^BW<7+zp<>GD%>Z%?+q#@YVS! z$2xUIXL08YNeLBJ;`17nH;NujYv5GLXk)4Cbi3s6L# zR|{aGX&1t(1jCd81%0yOk<2-ut(V~Z@v^|E9lC8PYlseBs;p$G6)-{fvyZPUYUi)9 zHDEHRUlKANPKqF0;wZrRfFDX0nUkD?JV}ugTYow#!>^cl30#$%{i*BF~;pmsGZaSBy268655bZtU zcUHaGRthqKz<)4G3Zw{iT`jDkJ}bR5{cVfOuk{c4+#);ShEEkj;W z(ehr-L7 zW4ao;+ge2AR{Julh!-DpHfqJ|9m-4rB;08+X4}lkycy7-t}L_EjYdG5VBJH@RODWJ zhvvUFMs&6LU<$7HwD!|&FVTOTNa`E#shGH6EwzSK5{xVw#R=ZYjNiFM83;J5tJQVy zyS=14<_kBTTA9s^ZcPXqHTLxL=48u!YfD1ypNT6XVZ00(wIPUiH!+RT_g#LfDBlKY zDOrsOStCX)hsioT^VhMRf+0scHiohD3`*zqL9Kytgw!l~Yv)^?({QaJcGW<|>$2k< zGnES7K_Z7gYf5uo9#I9IyqRb{DNyRdsZrah1l=_sp$+F$_kWE7f!zJT% zH86{@^_u)#n?#}C?m!hoLr-sDpTB4%5STgXE`ee!W>ptB-EpAgv{v4TxD2|>cPiNG zE+aNxT0}OOAle_?sf{L;SI(&o?HN5InxPMEBJasj2j0%IA5z=?wu4|~bvw^4M<`u7 zCg>XZ3FcF^{?jK1e@M#_)^7!(!q=9vO=~ACd*!=Y#;tv5CT+w!lTb z<l z#WJz>05B4FZk1-}>5eUpgmCSBooo0wi&9;0PRAA!`5BtGQZqh_WlM7kSu-629zBfH$~S3WA}E*usY&rQ@{83#eQdw&-j@hw!9!Xtcx&yr)n@GhR*S2 zk|QJ$>DvEtT{pcsF5PIblrG3TffdJo;TYbSxFU$vGww}zFe5s>KQ6N*ARt(7?RhRd z!MmM+GNNlYh$U+bRHicJg|B%^G%i6yIuW}98w-jQ2c{5g<1vQ__2T#ir>@EM{9B~l zs({=(qA`&U7mg;-9-K8zCjlo}DH_|#Voh!wyFJ|7IQo?E_!A~I>P<@doSxN)y{EVK zId3&GB$o9u{IiNVM>o}9pXf875iDl1H50*We z<^jz9%$8A66eKN%Rg#jiDK37rHBs##s2p=YR)a#*d#R?!=k;|NlhCa~+LTli81BB! zXv{4wtLyR#sah?HiUKQJaj49n$o{kDiwY?wW)=x}+ z1jL41)ux)l-M_V?`a{ouPcN7#_<`hyOEJ~sDgJEO2rnLkmyG0f2GvvL0)6IX`|J#p zOBI^Fj}c|iJSZJ0e6!*1Q4-T`L_Y($>+RuIeWyZ++|gYl3S#x7Q( zG+M1Z=Da^@r~CJ$u4rft4XmfnVTi$>No~ctO{ij-`tdvFC?+AkF=wTv%=~dmw!%O) z@U&PC9#AHw=~?Prlq1y}G`1X3+Y6W-)!@IZo%I(Px1)49JF6~U<0?;w^oe5-6cn&6 zf?Tw3fZc%QM8eQumBPF|o=IpBQI;FvY>=Y`JFD>y>;d3^mC+Wj-+!t`MCwTK?c4&z zxbX(**K&1tlRX)oGWLTInD+X_si{^i=?+zcP4W$ADOS#ae791#PZ4C~D1 zzEh020&8)r>2Y zh14k9j^xfTyDP-{P_uZeMg{3li$XT>M0;)}ao;YY)2xf|bY`)PCN_ zFVJT-&q9xO5SP?-{~k%HlG0=x+0>CTbXv(eB^KN#x4u^U?kh+G#dNz@ZtYA>K7J+X zsB6ZD-m_m->+cnk!O`taG<;sCXP%DMqU#~waBSS5o%f-O=>h)%?i$-4XCI9D+QR$) zTx+O`?Rh$7f=~ZiifI|1XFa+l>YdrW#i|>zWZ*&$|p^# zMs(zh-+XW8_&J}>Uk7&)&rp4Z*ntlOQ@2dkJQt~5y84zx)u-xG3%UUB7_Duu%xXQb z-?P*BS1+~b8zAyuymc~mY(V^QO%}Rc;(Rh!DLyWTp{CBTw1qM_M$Z zXwHX4fho+^==1t8Nki;byU31>On8h!&q9#pa~=!*#*N5K!Ni-qAU4OvhK9{ zZ5e;{AnTi`lzZlPf=P69A0&CR+lBdztE0EGkus zKnm?*jGe10Ud*&nv-umwtJaF+LiMLcBQq)CRKCGqPeNlF9$xWyQ3bW<8hVjik0`{Se&be zn+5@vnFC9kZ4$O8Y`Fn%2mgH7DkOc3sCq>i^K(nNNa|C*TAD+_*T^T#>ggEIFHFla z(aw*$w{+4BB83Y$^R!|bO|+t{*vQU3E`zn|NJQ`*CgJck7$B(BIcG2vPy5rgV4LN< z);;rtUpwZ6e%bE+bGbm`*Cs-+4YP*lE=$XFe9UP`q zNNEfURRINET1h<80%(@@SK$oSn?yBJ%+r#I|8lUJc^?zMk$1R`RuDGLM&hC=TkgEq z{^gpA+FI6c(l{W%F=oK2t>gOU!R&(&53){-3j$8tfCXrLmd0688HS!%)(Ltm-K3W1 z>oU5VtLLURw5u>vH%BJ~az9mV{-?CFb4%Vr0oK#aJ5KY+?wb8;Js8&kJP<_wM7puf z759X#!IZ1m=pS~%4s=tSKW}{Im8%gA4BFZIJ#_+Y$rZ%w?ct!XsShGYQXtp`k>{_w z<{4Q#oVM;W%YIWLkV3r1bkf~=87Rmxxns*(Bj{O-neyZDP4pVZ##kw^YX*xXr*EbM z04&xnoB6L4a)hr&tViSnKcvaXzK1P`^~R|Gq%D7cOCiYyf|W;vt7)E|ZT%>dxnq`) zu)!6{ieiO4L;9rQBC~CJCGyMOMEHe^J{~sG{KUuQ0-#@e5NOf>fM3wFC&~6^RJ>XW z@I1wJb8JGOqbEj2n?__;?yS}DKf?>xy|j& z40Of#wkx}YvZVUV-jO|qn#{8e6=zEBpLy|ZP|szI{r!l3Up>4c{RO9Ko>_Z`a>o$w zS@qxjQ00Blq$m$wWAe#R4O_OU?tw0SzoNz@{UAZ}5qX`ncs=&Othve*ye0zFZY?=3 zo?y`rB&($qbo-XGr!WY&;E2_vCu1{3Sx>kDc5$eJF|HaUfNF?ON#r>p zrVCkF#%sIg>mYJfo_NXoFXZ*mpVwaJeNuyJqzCwiuQ9D<<*ak+S>e^i$epj0IZ})9 zLuF-DsNG2ZDZ%Xb>&BKGI}4MV-TK+{9~zkLc~1{f#R@je&{f>+seQ|M>`xU1>P#F| zEhjd9qCs-N_G^Q;1aZ>*Ca%IyBBPUUR3dlVL`0(SxnO$!wH!&zq zX)V)xhZ$x8dZsosEOGP)cqvhDPaX_tO^c|MK@V6h8t>m}9yAbe#W=LtVew42u>UAu z&y{XT^%kn_v%yR(fqGGd7LAX!GNX#@H$gYZI;3{5 zIl4zK{8wJB?!{y2OHw`k^aDHk-i8s*Q+}#Jmhui$>8|mUsUQ6D_Flr~2iw!^qo>Qz z;t=||s*b?dqasbWL>RPCg?(am?8napDc)QFDRZmn8KEm3gKBFk-13D?jkMQ^`{+?4 zh_S&2pvS~De%3}~FM8Ekvp|sD>EiH#tAK(zCHkw*L~Wz&i>B0IAk%_(!|k@tL3#<0 z$?zw#ud}8)4HwvNqWRFqT5DHcM4r~WyI-##NFLqQ7`zf1^ax)o<8%#4vpJMN!Kie$ zQjOZkd0+AK(_RghmH+#u`8_p6+;cUv)c-iJCXBwh31AN6h$~HmpS~-7YmsY-4OV#j zot(?pcxjNI+!u)2987e|_~!ahn`t*0jOL|Su^4xp6-0`vrG8l{ zX+@DX^(J`;MD~M{I#D1jZ{`?0w_!6&v8P?K-^9*lLHEXWwcffPX8%Hzq(1H~D#=!c z6*xo%TbCV~2_I!HgotK9houewcm%zzwx3$E8w~vn9Er~!M=ngwCi2O6CBUd?8-&7= z`5y?!x3cZrqIoV97xAzM^6+DoyuPP>gsJoZW8XC?y-L1vpC8NkE{*$PAo^|6bzsYNc>`~DyS!M=G@9-P=d>sQ=_G2m zqjOY3M2&ddK-j5c(~ZYj!90gs&2_^pg3LMR8J`@EJCk)W_B9^+x06Fx24%{rmQJ=_sObYIjK2Da=eoRp6ScW32 z#d!~P{HPC{(QrRBiKe9r8K&p(`tr`bqkd-H#gnN~Ulg$HNR!s)aW}D3&kl>5_FvkN zbNAWkiO!d3vw1|FH=j5})-0tIi6Y4T^T(%!<_~p*JMD}|ZeIH{Bfk~SMN-qMGyGIL zhDBpJ_w3!DN=V63;`OM*j&6Mo?+;wlv2@6Ce47mVcM8So9Gu2ga$d3je$=yQ0jH{>B&h zt)1GY!8*h&v~y6VA~rK68wBu&(HY6Owcbhba#dYv#znDM+D`zLvO)m>o-QpThr(sX znOhIbfiDIB0-fdPU7DMKGB3;y2KfKS(!0kq{r`X5W0+HvrZ$GLg*oNihB<_pGh=e9 zWX?IC4<+Zc)|gY$oXuHLgwTh|Ip;${lCzMUl2qSozw5gGQJiWoh=oUSqH zfZY42Cgb`1rj5Chvh{do07j%rudftN6u5#7`E5P9!mUm%+FMANfpK$4f@GqpSqtxj z$OOIR^t;}XK**MH@uRt;GR^zIya-*KwxhRpekDum2%C+uNV3+~mLa9A=l8}lg)aX0 zYc%E+lW0>B^LJb^=1@(hrw8ZZn-K}vBWHcbrm$@g<3aU1#_7VFI|TjoaW~I`iW8gJ zvqN-}Hq#&-F4${y?DgpYG#|Oa&Lx(k2%*u(Q~EZU<(X6=^xe1RybzI&HrrVG=~&-M z+h`-G@_2Yb$#_UrfM^UEVKzp8C?%TdYAl~v<1vA_pwTfiqerc*gs3fZ5c$r-(}`Vk z*%{F{Q{PGtuD^$Ln?ro7de>x-gn3ejW0D^h{g0@8_mTJ2UBVxQ66K`yvUQ#<3%|JY z3Tv?~H!Y*%L`tduveb>GFvqo*tG?YBdvSq~=$%SGH}-leTrQ|br*PRKtgByY#*?8G zzca~qxSct=o<(m)xV#U<_kzF=po^k0c~N$sDMA@YUxm9q3#semwI|5igmtPHv2Tm& z{R=S7A5)NImvhb`ivnW?)&#sQ9WkmC4FcD~5wJV06(lWDrA@Q_f36`JcYSPcV0O%# zMu$;HNQ1s*LAW!Yw4u1lc$qWH$0m>A*Iu_^AtwAynwn`AsIF_U!net-HICdxVS+Nx zRVS@9Y#Z`EX+nd)Io}r!BGXwGO763OEFv1xG{ZB8D$@pA$05KG{@U67)WuJ zBp3V`{8ZUTx0PW%q%RLoRnZ2AZx*!M{LH58j94d{REP9(F#2GzXw|WB9@7+p;6-IR zCG(was%X?p#H}<)FKdos?O>;K1k)6WylI&>{A3&2mqKa9*G7l`z6gfu!UeQV?5w9|B!ods-pw z9Bga{s%Re19K0o!#s4Ayz6r-dqMoN&+G9{nP+_!zK~QE7=Q5M^Cs7gHzLYX*HCuQjQ z{u(r$J^1prKK%OuKPYdMx~2{{QM}5Or`z~flE?QiKB^hANWA0zv^*%$u%9BNl1w+G zLSL^4u7jsD+^;2=e~v`_IjqAjN!X@C4n`nwc0~cp z$9zlY*sS*YIFHn>%oHPj)oZxznIH_UideDILW$pq*-jFcH|oaiFD|3}N!Z zI|9^@WRAF(2J&ac=LeFmaP3-S+fdf@6y~I>b|qtw!(Q-G3yAFVs{2-ArrrgVaxyJK zacji!;h;1=VAu5-B=u%~@S7)VIWfLQtK$!{p$_gMnEnJ`==40v|9_$ ze3RsS5$+J=$~th8dgOf}DK&+bVsXUAc3PCj)JKz0GFMky7t<`GLrg&`64}`;aOQ_M zI!3xHZYARhZaX$>u;EDrECAX{Da`%T`BO~}sd`qD!x$s_`N5&ujcq|Qb{D}^tIxk` z*dT5O*KEWM#gs(u^%wh_lhG*gUUp0HG12Z?;GO?0Z!$1-c_`aHiiCV3l^Ladqg))3 zbeiNDzq?~|i{`XE;+4t{3;z6Zp12hn3dp%$lpqo%W-`RR7d#NiuSMKa%)}$O@lud8 zoqbF}oyP;i2iy&OP^!1+m*e>O6DJCZoDt&|`RPy3@KCW4$@b5LuOpVx2_v0;wmht1 z)7Mh&6{iJ0jeezwB5?&?{}gFq>IwZRQL7&Tdsf-1`BBpnz05#E7NCfSKBD=|@QagE zsfC|hzkrdF!W7f03+Z+`tx1n!?g{h9NDds+eV_;e_HOk``=jDm-*cOVJx}28K3F%d ztmjGbHYBt-!|Jv6tjkilOP}=u3w2|gZl%ImRkjX`IPe3s3vd^HlNy*m(k8zW1P@l3 zD;%z{CGy6(ML;)Xq|029cC!1g03z46bo&$vzA28wwH;qMA!CV%&&s(gMAtI+U;VJ4 zKi{IxHWC6WcshH1YSVMK6SASsXF5Ii56hI_t{K|h9c*+vT4M+Z7=L?HHXYLUbGU6~ zw)=HPY=BAoGbi}pT{G9*T4Ux|Agfv$FhsGfy%f8~yAa=7a=3a{G= zp+4ypW6s>VtgPz6JgOUCDj*LodSKYX>bUMjiM~t!v>}t>Xe!XxFI1pyzaMq{QYjgTuxyM|GjnZDmCzR4y3|3(1FZQ^JGkS-zXUIJU|vR{(Fq$og^ zE{{V=m*gguc7O@>?^J(%q)%v)vqEbq(HS$}Cu=4kW&eaUgeE^If+QIFv!y*2sI6o~ z9w3XlIKKWy`WqTP_JyO8*7^sYU0Vgr(%OnBhc`^=p9Cm~K>PAB(KwzGT3nOhrU`xVtg~1o z<&3t{>Ma~ApCW25mJqBl5%ev3GI*wDJ_mJ$1GJ06-bF20W+_5P%!qbr$P{E1^W@1> zuAke-O>OQFq1Y$#0`#T4iy#E$Xt_?4?Vx}^z(hyr1sj30ue467khFizdv~FLtDh|< zaYwh8&yZ=hBb(%iMD_i)ZhhznKdVuAkD>a0bTM$A$`1tF5OlAH^epNA9=m#8E5pnm z>2hFIe^QU>Hu={16T4}r$Z@kSdc+_$0P>kuiCp}7RMUW(QReVLGkN^2qHDEr_+@%n zt>i*)7-!AG5@~DvakJ{5mV0IR@XJ8Z$)x!pMF7MwG3KG~F?D2RnxxUd zAjfVeo1C)DMk8Q>$zs}gnH3s%SZS-i?c&1c^TB1ODkpi|LVu4o&wbO!d2htOJQKtG zeAr!_+*uvPHW+tmEfPeT1^>JV@e`hwh$3Sum^)2mGh85gDP^?iiQ;2~$mSeXgKl#U z0JEvTtv;tI&Ld&|XU_yV!bAyFwUP5(dpo=ZkWHhZzCnF8=TJTP67aIWj>d~B@T7C}UtmbL1L7Rh!Y%HqL9Dnck%oBGZugLMgHS$yylZj#o=*mM{o$m)4&$oIC^zBz zx$8VU^=DiAv^@Wyl-piUURMObkBga1q!6K*7HUVUDq61lfpCY6^g#C-8>ibhgrt}~L2Gt^HVOV-*^`x+8)tA&y5xFSySDnPMH(9v7BiMb&_fO> z${!M;+dgG7`~7r(sf^nutONF<+O8}|MJ=)qBLv*=wHGO3_e>Iu*FGgI?v1jTKaR+q z+po}>ekvs3@N&O`5Hso&y`eFyIR5=@n`rNJ?YjnsSWIlx@0bZc^(v3KI6nP|8h#bb z$u&00Sq}bnJ!_M0rzrt(7p|Fm-0>2A-!>S)(De?-(CpL|1x!D>qCqd9RXqm*q#knh zd|$m?c5a_VuKnWSah2b!J`~s2`L)BRQ7I{G;T_2n9;)Nm%=um~I@y)O(%I^*MqAcb zfN4EteHD2OWTG$aL`-nkV_?*fUlVQ*`#rPMbUL*gyJVLv6`7?mpf z8xCw$pP4)8JnS4l0{J5(kNcWPdw^G`t0nxX(&GSeC$3lLGmNm~k-2WbRuC9_YuEf# z@4)DB1_-2O#d3bYnCJe^2&6`ws_ix9ychpvp(J=bE&}o+P&v{kKa2PKN}3Nxs)<`= zhFT`*d33R?7D4%6Mcs`g6iFttSL_P3T-g%obUkZ#WWjmoe*kW`rr?Cd<_`ReC>Ma> zW9*2vjasn*f~W0Q!{(Nm{TPRv9XANNn2EP*xN5JS*-V=)qh1Z~mHJR{zv)IKZOQ~h zFakn3s-A`mxM%&Q+s??1{@q)>s(@bvXin8ceabal$**m}Y+$SZ`@~3o!D6T74-^Oe z8uLFLE1_ifUbU1`9rJ#iq^nwBe>qN@fDv0Zy$xR&HEw-?A$;zrZj1=lKWFj6#SiN< zl)asi;sB8A5Ek(oZS0$s%rSoixlT{BCVIp@h_~YOScmP)dN2EBXuuEbV55Jf)~g=^sk+0lo7>(ceg#;l2GKGppcXs=}-;34vD7UhBS=mF=qEFTmgP@;RW6kr71x<-7)%OfX!C0NK%q~lxHD=MlP<#waxOlMW?vojwo8`*9B7-=Ti z!WUKyk`)lfmz)LKneoq8DLAnXg+OI~XJY;vTc6>tA0rr?yutWSa&@B-;C@+?*8eD; znpxkW%dF3mCAC5&YW($8zShqGf7Dz`xd_ahje|Bgn4&aKe+#7=olZx7^uBcf3#)oV z)GpOJXVL!+gdGBk6W_Q0DO&ax*-X+3&hK+XbO9??ZIoC4yyXFCf5&hX1gE7l6E2p~ zx`eiP(V;2R^!K7pw2}Yzt6y!8H8|jTIVKf4KqrDPtYIWr#8Q!B>A<2vQTFM~617?6 zu)!$CDMzv9jm34{Vf4<)WXjziT*Uxj!d=~N4SWAruOv?CLX;APzI4Q8?&*XmWtYYQSD_i7Ll0G zyGM*lFGZ2gmjd&5D10i$@T^V{REMdzru?j$igl^Rb>0*3!GD$3lW$>8O0KO>ke4pT zDwZv?O@>7f`n)>7S_ES)1x?!jTs3hNX>5 zU_ci0f}m5nBwm*t?2*Nr=PG!O!b~oMi({;3n@oEA=FRp@^8%tH#7v6$AUcl3xi)B7 zm(Fx%>EU9uRVSTKQPWCC#vd1L74&!81}U7Oloowe@m}XRDK2LG@EeL3=Zf_L(KD%< zR=DU8;}o0T@m#LaBV`+ZkfJP(x z?>g$AFTi;N#POIeSfYhg>#mXi;p?~u3Vgyvi<93X*9#(#tCQotVL+8t5?TBm6U|`5 z8T0ckCrs|#=%H#UWCW;{r{gH=bS_veBxQkh`I+T&lgxXQv0zH-R*G|6$dEyNSGpUp zO|!L2P@~+A@)WknLZf?5ll{XNGe1(ZY<%rJGtKTr2H!hpHh4DB5(t}Eorg3yhb)xf zuv~z22;XhjwbMYq^$p!|h+CM=c&$ z&hYFYq(r<=;|#m{u{asqzl)vXPR$(z6#PM~-zShiyZpRNQGQEb--y1kR`6GcU`55C z+3acKLtTN3b@*m`O_F*1 z>&5>|Ew@}&-t+Qg3+xP>CwhlxuGY&aWni(J#d92nF7HDMlG5}EvU2soTsHg7T6G+c zTTcDbRXEaJ`1C}~En#o`*SG;Nw>^io)%Kx`N*T0PY)Nh39^<9qz+(1qA;{7|NQ>Nt zSi(Htr;5(S-c`}$$Ybocn(v*Y;YjT%4^E&#t%Y(VBltqC<%`FFO1ah^;|-s!xr^se zIw2KWd2SRq zgDDH#A~$_5yLd&#bm>a3^pmDU1;Ig9%b%umwo;^TaN?4yBCx@UzUy6cOE#V_3kUb1cS7fF-M`2CC!Yh@Eoxkn>=u8exak2I|=Xc`wi19wj@ zwA{G{*YI_?>p13KCXp15lkL&`Kh)*3XO_rYWBdq_=mO0c>zI-;|LM)Qiw)Vj{c@b} zdyefdIP}tSMxbZ15|b-`7{9bD1WRG7vDXOK%9*qN2|NwD-vwV!q)e&5Vjsh6TYUa> zsGVH|(5k(^2Yy>?b>c_W5H(b6FpZs~KysJ;-)gRZ+_W;1XgqKllxTNAqHfR+tG+)W z1~1>k7|iQQRvY~15K;QG?^;zHC67|q_1+j&z{_Xvsm7f$W1104+0F1*G z=HoCUU-4XKa99y+KXS{Q^~#O9R(`XkoVgE{pZjd-L1{(9Ar{D*{T3<8C<|*Y?VpNITuL8JRr``toM`}awe>xB%<t zCU`oXQ$*iiO!`<2&QAThxwTLttN7rZpZp(rb0e>WD%bfitZ{{l90yx^2yK>@K}Hv(3`4$yI#J8c50oi_nj*Ra0ZjhXcDprKtWDnzPZzPk8in6qCv(9*xL$2dG? zrT7NYx+nT<3{mKnLwk7`sTH(Ilzj-!U^bq@w@0(A4TJKS1Za`Oj#TB$1_I2S=m*p@5-6OCKg|J&)-BsmK*L(j1GL={&KVBnY0os7Ra?vhFP^ zV%vxU&$E64rkU8W#ZwQ%d!zM*`uMf}O2geKN8qKvGm6WVe>Pb}$HglDcymM-j+e<8 zZw^VW_OCa|-VU0735$RHWjy~^teUmhnU9D%N8AEe52g+wyP&@N?tmQ3ut^-=rK+C{5szk4zyb8|d7>18q~dE3yeA%`?` zYCD#8ht_j@nqC_lg)7vU46d~6T4J#IErZ8d*w$ZpgZK5m-E&<1Vl(OJg|{@LS$&9v z#S-BwZu^Gf=I`l&vUs0cc7M4|go{Ds=-}vxT>=CzH`s;UWQ{(;dQ}=inu;ZY=r;dx z6Ggnc`D3R(jNrJO^zN4%iU&+g({2B?PpF5Ghu0o)7?**z@&cWMMwan`N_ud9HN~SN zCQpdMofXZO^>lQc$J*$oWBOTk!-dCdOIhYfQ)Vb=Z!)ZM^a4Ees0RNOXXtlc@~FPL z3}%;I=AOPTY$;|^61P4%HR#RyiXVO?SQdej*jHFEmF|Tcma+-Dml_FA<`yUGz&P&%A1((?U2eOm;)#o z(Gf=#&*hZSn^vl36nt-;RaO2fG`$Eg-BVFGZCm znq-{hT+R>jWtqyHl^8)U64WSuHPU#u185m{(N9-xpHx>ADNxVvQ%~d&dU%zhA|PBD z{9nZX0Cm>278IV88-Y&XBp*$dre@w|u}4O7dy;p?)z_1|JxvC#3tX9>!Sdf^-0aNG zmc06$%IuB_x%H7L+=d!8uRU@^+6y5-fwIH$?E?>jj-D zqEAGEY=Njt@qqJlm^$IUoZA740^$1=f_g#8go+5wK$XHeR`*)spBN4p$WfcBpW zLROlch3foJrnx`syR;6vDn7rHD!9aUHYhEij%75P)02nCmpgdizpvKwBHOpPPCKsv ze|cm_V0ibW5jBVFe`H+jYz2H-CIdrs!9VWge)(nUC;RtX(mZ?NCG|K?V11pyUU#!r z%yOK$b;pBi>zWUh{+(4sDK@YTbYA`d5ls@65nsdUyDiU5ZQLp6g2jFJH`eb}Qw=xS zl04dPzEi0(GM)YUkwnI`oyyu%NPbb!NC&cdx_ViLNPX9=Q+J(%hxA7ul*p_JmMPB< zX1U{YS6;f%M>Tn0enM130q*@~N9#>jf6x?$DuU3P{WTX+NO>;(WKusIcFr^am9hG8 zMO&$J7>hq<_$L|;1_^dlh6{7u2)>tZlKF3W2u7O<8R@|Oc|u}c_Kg$eQ1n3;r$CQM zyr0{Ml$Y%9Be>OD_nmo&lY6aB1psP!Z^ev{?KY52vZ}|GO z!}QYobUa!f@~y~o4>Vmd6A?AA_)Lje>mc3A=Bf`J5>Gc(aU5(5%=pv_{U^q_ZmHl! zEG0GFKl9nk>weBfpF(1{?n4;wofnO&P3Qfm5FGy7v#QcYdPR`e z`OkY=oXjw|65Y40Hw3WNQ#I5yisV zwMy}|$?ONJ{$&I;)oVVJAvnRGsUMdk5(2?%aYD5rEi0aJ9gn2L5UW^Co80mcdc(Fx zo|iZDMEBw(H4E_hL7&dwAmZwa1HMJp^{QUS7sJ(fSNpKd@tW&{Dp$2X0IZoB`gZNC zg4Ek~`qHLeybfQGaa2w23Y_suhGmuNwS33tnwnKMD_5BrxnW;$*8iQqWE3E)ks##7 z%1q(^-{G8G#C{1}QpbtXU^d1V8+U@P-0CDOFJ#a`(T%CT&V+MAntP1SYNVIw;UXt& z++~f9#*_p2Fsd*TVxJkbgIRT+hp&IELw|iupytj-mXmIKGT_K%i0XJzW+EA~5_3uj zG2_^A-|g0vA_HOL>3p2%GFGL&Vg9eU;MQ$#JQ|JpZG!{oR2I3$*o23Q|2k&$@UxBo zi1Yyvl!MuE_8gtgch8_X#KK;@Nuh=0%-{De0%Ut^os5I$zA#yv$>^OqvcF>S%jq)G zlX{gAH7HAJ_vOz=>m5>9ez4+MO6XtIxA$q6wXRf^dwL(0!go&I1ejzzY!TOmG57YA z7Wj8KUy~#B2~bv=Tif^h%I_(P?6wDVS=`cROm*yxYNvqS0A-!2k5Ymi`SKQKk-#=) zW(Sp}EKh>^wVT|TU^ZsFOc{>^aR;|TYh=hp01bY}qqS#u1O*2fspK#wt!

-h@j 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 K#!LP8<^KS$;$JHO diff --git a/luci-theme-edge/htdocs/luci-static/edge/cascade.css b/luci-theme-edge/htdocs/luci-static/edge/cascade.css deleted file mode 100644 index 9cfb8c858..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/cascade.css +++ /dev/null @@ -1,4147 +0,0 @@ -/** - * Edge is a clean HTML5 theme for LuCI. It is based on luci-theme-Argon - * - * luci-theme-edge - * Copyright 2020 Kiddin' - * - * Have a bug? Please create an issue here on GitHub! - * https://github.com/kiddin9/luci-theme-edge/issues - * - * luci-theme-material: header - * Copyright 2015 Lutty Yang - * https://github.com/LuttyYang/luci-theme-material/ - * - * Agron Theme - * https://demos.creative-tim.com/argon-dashboard/index.html - * - * Login background - * https://unsplash.com/ - * Font generate by Icomoon - * - * Licensed to the public under the Apache License 2.0 - */ -/* - * Include base and custom css - */ -@import url("custom.css?v=1"); -/* - * Icon Css and Fonts - */ -@font-face { - font-family: 'Google Sans'; - src: - url('data:application/font-woff;charset=utf-8;base64,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') format('woff'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'argon'; - src: url('fonts/argon.woff?vncylf') format('woff'); - font-weight: normal; - font-style: normal; - font-display: block; -} - -[class^="icon-"], -[class*=" icon-"] { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - color: #5A8DEE; - text-decoration: none; - background-color: transparent; -} - -*::-webkit-scrollbar:hover { - background-color: rgba(100, 100, 100, .09); -} - -*::-webkit-scrollbar-thumb:vertical { - background: rgba(100, 100, 100, .5); - -webkit-border-radius: 100px; -} - -*::-webkit-scrollbar-thumb:vertical:active { - background: rgba(100, 100, 100, .61); - -webkit-border-radius: 100px; -} - -*::-webkit-scrollbar { - width: 0.5em !important; - overflow: visible; - border-radius: 4px; - -webkit-border-radius: 4px; -} - -*::-webkit-scrollbar-track { - opacity: 0; - -webkit-transition: all .5s; -} - -*::-webkit-scrollbar-thumb { - overflow: visible; - border-radius: 4px; - background: rgba(100, 100, 100, .2); -} - -.icon-hello-world:before { - content: "\e90e"; -} - -.icon-expand_more:before { - content: "\e20b"; -} - -.icon-menu:before { - content: "\e20e"; -} - -.icon-favorite:before { - content: "\e291"; -} - -.icon-spinner:before { - content: "\e603"; -} - -.icon-delete:before { - content: "\e900"; -} - -.icon-edit:before { - content: "\e901"; -} - -.icon-use:before { - content: "\e902"; -} - -.icon-loading:before { - content: "\e903"; -} - -.icon-switch:before { - content: "\e904"; -} - -.icon-error:before { - content: "\e905"; -} - -.icon-dashboard:before { - content: "\e906"; -} - -.icon-logout:before { - content: "\e907"; -} - -.icon-Network:before { - content: "\e908"; -} - -.icon-services:before { - content: "\e909"; -} - -.icon-system:before { - content: "\e90a"; -} - -.icon-vpn:before { - content: "\e90b"; -} - -.icon-storage:before { - content: "\e90c"; -} - -.icon-statistics:before { - content: "\e90d"; -} - -.icon-angle-right:before { - content: "\e90f"; -} - -.icon-password:before { - content: "\e910"; -} - -.icon-user:before { - content: "\e971"; -} - -.icon-question:before { - content: "\f059"; -} - -.sk-folding-cube { - position: absolute; - width: 40px; - height: 40px; - left: 50%; - top: 50%; - margin: -20px 0 0 -20px; - -webkit-transform: rotateZ(45deg); - transform: rotateZ(45deg); -} - -.sk-folding-cube .sk-cube { - float: left; - width: 50%; - height: 50%; - position: relative; - -webkit-transform: scale(1.1); - -ms-transform: scale(1.1); - transform: scale(1.1); -} - -.sk-folding-cube .sk-cube:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #5A8DEE; - -webkit-animation: sk-foldCubeAngle 2.4s infinite linear both; - animation: sk-foldCubeAngle 2.4s infinite linear both; - -webkit-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -.sk-folding-cube .sk-cube2 { - -webkit-transform: scale(1.1) rotateZ(90deg); - transform: scale(1.1) rotateZ(90deg); -} - -.sk-folding-cube .sk-cube3 { - -webkit-transform: scale(1.1) rotateZ(180deg); - transform: scale(1.1) rotateZ(180deg); -} - -.sk-folding-cube .sk-cube4 { - -webkit-transform: scale(1.1) rotateZ(270deg); - transform: scale(1.1) rotateZ(270deg); -} - -.sk-folding-cube .sk-cube2:before { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; -} - -.sk-folding-cube .sk-cube3:before { - -webkit-animation-delay: 0.6s; - animation-delay: 0.6s; -} - -.sk-folding-cube .sk-cube4:before { - -webkit-animation-delay: 0.9s; - animation-delay: 0.9s; -} - -@-webkit-keyframes sk-foldCubeAngle { - 0%, - 10% { - -webkit-transform: perspective(140px) rotateX(-180deg); - transform: perspective(140px) rotateX(-180deg); - opacity: 0; - } - - 25%, - 75% { - -webkit-transform: perspective(140px) rotateX(0deg); - transform: perspective(140px) rotateX(0deg); - opacity: 1; - } - - 90%, - 100% { - -webkit-transform: perspective(140px) rotateY(180deg); - transform: perspective(140px) rotateY(180deg); - opacity: 0; - } -} - -@keyframes sk-foldCubeAngle { - 0%, - 10% { - -webkit-transform: perspective(140px) rotateX(-180deg); - transform: perspective(140px) rotateX(-180deg); - opacity: 0; - } - - 25%, - 75% { - -webkit-transform: perspective(140px) rotateX(0deg); - transform: perspective(140px) rotateX(0deg); - opacity: 1; - } - - 90%, - 100% { - -webkit-transform: perspective(140px) rotateY(180deg); - transform: perspective(140px) rotateY(180deg); - opacity: 0; - } -} - -.table { - position: relative; - display: table; -} - -.tr { - display: table-row; -} - -.thead { - display: table-header-group; -} - -.tbody { - display: table-row-group; -} - -.tfoot { - display: table-footer-group; -} - -.td, -.th { - line-height: normal; - display: table-cell; - padding: 0.5em; - text-align: center; - vertical-align: middle; -} - -.th { - font-weight: bold; -} - -.tr.placeholder { - height: 4em; -} - -.tr.placeholder > .td { - line-height: 3; - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 0.4rem 0 !important; - text-align: center !important; - background: inherit; -} - -.td[width="33%"] { - padding: 1.1em 2rem; -} - -.table[width="33%"], -.th[width="33%"], -.td[width="33%"] { - width: 33%; -} - -.table[width="100%"], -.th[width="100%"], -.td[width="100%"] { - width: 100%; -} - - -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: inherit; - font-weight: normal; - line-height: 1.1rem; - color: inherit; -} - -html { - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - font-family: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; - font-size: 0.82rem; - color: #4d5156 -} - -html, -body { - margin: 0; - padding: 0; - overflow-x: hidden; -} - -select { - padding: 0.36rem 0.8rem; - color: #555; - border: thin solid #ccc; - background-color: #fff; - background-image: none; -} - -div { - position: relative; -} - -.btn, -button, -select, -input, -.cbi-button, -.cbi-dropdown { - color: #4d5156; - border: none; - border-bottom: 1px solid #9e9e9e; - outline: 0; - background-image: none; - box-shadow: none; - transition: box-shadow 0.15s ease; -} - -input:not([type]), input[type=text]:not(.browser-default), input[type=password]:not(.browser-default), input[type=email]:not(.browser-default), input[type=url]:not(.browser-default), input[type=time]:not(.browser-default), input[type=date]:not(.browser-default), input[type=datetime]:not(.browser-default), input[type=datetime-local]:not(.browser-default), input[type=tel]:not(.browser-default), input[type=number]:not(.browser-default), input[type=search]:not(.browser-default), textarea.materialize-textarea { - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - border-radius: 0; - outline: none; - margin: 0; - padding: 0 0.5rem; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-box-sizing: content-box; - box-sizing: content-box; - transition: box-shadow .3s, border .3s; -} - -.cbi-value-field>div { - position: relative; -} - -.focus-input { - position: absolute; - display: block; - width: 100%; - height: 100%; - top: 0; - left: 0; - pointer-events: none; -} - -.focus-input::before { - content: ""; - display: block; - position: absolute; - top: 2.2rem; - left: 0; - width: 0; - height: 2px; - -webkit-transition: all 0.4s; - -o-transition: all 0.4s; - -moz-transition: all 0.4s; - transition: all 0.4s; - background: #5A8DEE; -} - -select+.focus-input::before { - top: 2.12rem; -} - -.node-main-login .focus-input::before { - top: 2.73rem; -} - -input:focus + .focus-input::before,select:focus + .focus-input::before { - width: 100%; -} - -select, -.cbi-dropdown { - width: inherit; - cursor: default; -} - -select:not([multiple="multiple"]):focus, -input:not(.cbi-button):focus, -.cbi-dropdown:focus { -} - -.cbi-dropdown, -select[multiple="multiple"] { -} - -pre { - overflow: auto; -} - -code { - font-size: 1rem; - font-size-adjust: 0.35; - padding: 1px 3px; - color: #101010; - border-radius: 2px; - background: #ddd; -} - -abbr { - cursor: help; - text-decoration: underline; - color: #797474; -} - -hr { - margin: 1rem 0; - opacity: 0.1; - border-color: #eee; -} - -header, -.main { - width: 100%; -} - -footer { - font-size: 0.8rem; - overflow: hidden; - padding: 1rem; - text-align: right; - white-space: nowrap; - color: #aaa; - text-shadow: 0 0 2px #bbb; -} - -footer > a { - text-decoration: none; - color: #aaa; -} - -small { - font-size: 90%; - line-height: 1.42857143; - white-space: normal; -} - -.main { - position: relative; - top: 0; - bottom: 0; - overflow-y: auto; - height: 100%; -} - -.main > .loading { - position: fixed; - z-index: 1000; - top: 0; - display: block; - width: 100%; - height: 100%; - pointer-events: none; - background-color: #f0f0f0; -} - -.main > .loading > span { - font-family: monospace; - font-size: 2rem; - font-size-adjust: 0.35; - position: relative; - top: 12.5%; - display: block; - text-align: center; - color: #888; -} - -.main > .loading > span > .loading-img { - position: relative; - top: 0.1rem; - left: 0.05rem; - display: inline-block; - width: 1.25rem; - height: 1.25rem; - margin-right: 1rem; - animation: anim-rotate 2s infinite linear; - background: url(icons/spinner.svg) no-repeat center; -} - -@keyframes anim-rotate { - 0% { - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - } - - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -p { - line-height: 1.8rem; -} - -.main-left { - top: 0; - float: left; - width: 15%; - width: calc(0% + 15rem); - height: 100%; - background-color: #fff; - background-color: var(--menu-bg-color); - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - transition: box-shadow .25s, -webkit-box-shadow .25s; - overflow-x: auto; - position: fixed; - z-index: 100; -} - -.main-left .sidenav-header { - padding: 1.5rem 0 0.6rem; - text-align: center; - width: calc(0% + 13rem); -} - -.main-left .sidenav-header .brand { - font-size: 1.8rem; - color: #5A8DEE; - font-family: "TypoGraphica"; - text-decoration: none; - text-align: center; - cursor: default; - vertical-align: text-bottom; - white-space: nowrap; -} - -.brand img { - width: 180px; -} - -.main-right { - float: right; - width: 85%; - width: calc(100% - 15rem); - height: 100%; - transition: all 0.2s; - overflow-x: hidden; -} - -.main-right > #maincontent { - position: relative; - z-index: 50; - margin-top: 2rem; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.nowrap:not(.td) { - white-space: nowrap; -} -[disabled="disabled"] { - pointer-events: none; -} - -header { - color: #fff; - color: var(--header-color); - display: none; -} - -header .fill { - padding: 0.8rem 0; -} - -header .container { - height: 2rem; - padding: 0 1rem; -} - -header .container .showSide { - display: none; - font-size: 1.4rem; -} - -header .container .brand { - font-size: 1.5rem; - color: #fff; - font-family: "TypoGraphica"; - text-decoration: none; - padding-left: 1rem; - cursor: default; - vertical-align: text-bottom; - display: none; -} - -header .container .pull-right { - float: right; - margin-top: 0rem; - display: flex; -} - -header .fill .status { - position: absolute; - top: 25%; - right: 1em; - float: right; -} - -header .fill .status * { - position: relative; - top: 0.2rem; - float: left; - margin-left: 0.3rem; - cursor: pointer; -} - -#xhr_poll_status { - display: flex; - margin-left: 0.5rem; -} - -#xhr_poll_status * { - color: #fff; -} - -.modal.alert-message { - background-color: #5A8DEE; - color: #fff; -} - -.modal.alert-message p { - font-weight: bold; - font-size: 0.9rem; - text-align: center; -} - -.modal .label.warning { - background-color: #FDAC41 !important; - color: #fff !important; -} - -.danger,.error { - background-color: rgba(255, 91, 92, 0.2) !important; - color: #FF5B5C !important; -} - -.danger a,.error a { - color: #FF5B5C !important; -} - -.warning { - background-color: rgba(253, 172, 65, 0.2) !important; - color: #FDAC41 !important; -} - -.warning a { - color: #FDAC41 !important; -} - -.modal.warning { - color: #fff !important; - background-color: #FDAC41 !important; -} - -.success { - background-color: rgba(57, 218, 138, 0.2) !important; - color: #39DA8A !important; -} - -.success a { - color: #39DA8A !important; -} - -.alert, -.alert-message { - font-weight: bold; - margin-bottom: 1em; - padding: 0.7rem 1rem; - background: rgba(90, 141, 238, 0.2); - color: #5A8DEE; - border: 0; -} - -.alert a, -.alert-message a { - color: #5A8DEE; -} - -.alert h4, -.alert-message h4 { - padding: 0rem 1.5rem 0.75rem 0rem; -} - -.alert .btn, -.alert-message .btn { - height: auto; -} - -.alert-message > h4 { - font-size: 110%; - font-weight: bold; -} - -.alert-message .btn { - padding: 0.3rem 0.6rem; -} - -.container .alert, -.container .alert-message { - margin-top: 1rem; -} -/* - * Main Menu - */ -.main .main-left { - transition: all 0.2s; -} - -.main .main-left .nav { - margin-top: 0rem; -} - -.main .main-left .nav li { - padding: 0.5rem 1rem; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.main .main-left .nav li a { - display: block; - color: #5f6368; - color: var(--menu-color); -} - -.main .main-left .nav li { - padding: 0; -} - -.main .main-left .nav li ul { - display: none; -} - -.main .main-left .nav>li>a { - display: block; - margin: 0.4rem 0.5rem !important; - padding: 0.5rem 0 0.5rem 2.5rem !important; - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; - text-decoration: none; - cursor: default; - transition: all 0.2s; - position: relative; - font-size: 0.93rem; -} - -.main .main-left .nav li .menu.active { - color: #fff; - background: #5A8DEE; -} - -.main .main-left .nav li .menu.active::before { - color: #fff !important; -} - -.main .main-left .nav li .menu.active::after { - transform: rotate(90deg); - color: #fff !important; -} - -.main .main-left .nav>li>a:first-child:hover { - cursor: pointer; - color: #fff; - background: #5A8DEE; -} - -.main .main-left .nav>li>a:first-child:hover::before { - color: #fff !important; -} - -.main .main-left .nav>li>a:first-child::before { - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - position: absolute; - left: 0.8rem; - padding-top: 3px; - transition: all 0.3s; - content: "\e915"; - color: #5e72e4; -} - -.main .main-left .nav li .menu::after { - position: absolute; - right: 0.5rem; - top: 0.8rem; - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -moz-osx-font-smoothing: grayscale; - content: '\e90f'; - transition: all 0.15s ease; - color: #ced4da; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - transition: all 0.3s; -} - -.main .main-left .nav li .menu[data-title=Status]:before { - content: "\e906"; - color: #5e72e4; -} - -.main .main-left .nav li .menu[data-title=System]:before { - content: "\e90a"; - color: #fb6340; -} - -.main .main-left .nav li .menu[data-title=Services]:before { - content: "\e909"; - color: #11cdef; -} - -.main .main-left .nav li .menu[data-title=NAS]:before { - content: "\e90c"; - color: #f3a4b5; -} - -.main .main-left .nav li .menu[data-title=VPN]:before { - content: "\e90b"; - color: #8965e0; -} - -.main .main-left .nav li .menu[data-title=Network]:before { - content: "\e908"; - color: #8965e0; -} - -.main .main-left .nav li .menu[data-title=Bandwidth_Monitor]:before { - content: "\e90d"; - color: #2dce89; -} - -.main .main-left .nav li .menu[data-title=Docker]:before { - content: "\e911"; - color: #6699ff; -} - -.main .main-left .nav li .menu[data-title=Statistics]:before { - content: "\e913"; - color: #8965e0; -} - -.main .main-left .nav li .menu[data-title=Control]:before { - content: "\e912"; - color: #5e72e4; -} - -.main .main-left .nav li .menu[data-title=Asterisk]:before { - content: "\e914"; - color: #fb6340; -} - -.main .main-left .nav li a[data-title=Logout]:before { - content: "\e907"; - color: #adb5bd; -} - -.main .main-left .nav li:hover { - background: none; -} - -.main .main-left .nav li .slide-menu { - margin: 0 0.5rem 0 2.5rem; - padding: 0rem 0.5rem; -} - -.main .main-left .nav li.slide .slide-menu.active { - display: block; -} - -.main .main-left .nav li .slide-menu li { - position: relative; - border-radius: 2px; - margin: 0.2rem 0; - padding: 0.5rem 0rem; - background: none; -} - -.main .main-left .nav li .slide-menu li a { - white-space: nowrap; - text-decoration: none; -} - -.main .main-left .nav li .slide-menu li::after { - content: ""; - position: absolute; - left: 0; - bottom: 0; - width: 0; - height: 2px; - background-color: #5A8DEE; - transition: all 0.2s; -} - -.main .main-left .nav li .slide-menu li:hover { - background: none; -} - -.main .main-left .nav li .slide-menu li:hover::after { - width: 100%; -} - -.main .main-left .nav li .slide-menu .active { - background: none; - color: var(--menu-color); -} - -.main .main-left .nav li .slide-menu .active a { - color: var(--menu-color); -} - -.main .main-left .nav li .slide-menu .active::after { - content: ""; - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: 2px; - background-color: #5A8DEE; - transition: all 0.2s; -} - -.main .main-left .nav li .slide-menu .active:hover { - background: none; -} - -.main .main-left .nav li .slide-menu .active:hover::after { - width: 100%; -} - -body[class*="node-"] > .main > .main-left > .nav > .slide > .menu::before { - transition: transform 0.1s ease-in-out; -} - -body[class*="node-"] > .main > .main-left > .nav > .slide > .menu.active::before { - transition: transform 0.2s ease-in-out; -} - -.main > .main-left[style*="overflow: hidden"] > .nav > .slide > .menu::before { - display: none; -} - -#maincontent > .container { - padding:0 2%; -} - -.Overview.node-admin-status #maincontent > .container { - padding:0; -} - -.Overview.node-admin-status #maincontent > .container h2{ - padding-left:2rem; -} -ul { - line-height: normal; -} - -li { - list-style-type: none; -} - -h1 { - font-size: 2rem; - padding-bottom: 10px; - border-bottom: thin solid #eee; -} - -h2 { - font-size: 1.8rem; - padding: 1rem 2rem; -} - -h3 { - font-size: 1.4rem; - margin: 0rem 0 0 0; - padding: 2rem 2rem 1.25rem 2rem; -} - -h4 { - font-size: 1.2rem; - margin: 1.2rem 0 0 0; - padding: 0rem 2rem 0.75rem 2rem; -} - -h5 { - font-size: 1rem; - margin: 2rem 0 0 0; - padding-bottom: 10px; -} - -.container .cbi-section{ - margin-bottom:1rem; - -} - -.cbi-modal .cbi-section, -.cbi-section .cbi-section { - padding: 0; - box-shadow: none; -} - -.cbi-modal .cbi-tabmenu { - margin-left: 0; -} - -.cbi-map-descr, -.cbi-section-descr { - font-size: small; - line-height: 2rem; - padding: 0 0 0.5rem 0; -} - -.cbi-section-node { - padding-left: 2rem; -} - -.cbi-section .cbi-section-node { - padding-left: 0; -} - -.cbi-section-descr { - color: #404040; -} - -.cbi-map-descr + fieldset { - margin-top: 1rem; -} - -.cbi-map-descr > abbr { - cursor: help; - text-decoration: underline; -} - -.cbi-section > legend { - display: none !important; -} - -fieldset.cbi-section{ -border:none; -} - -fieldset > fieldset, -.cbi-section > .cbi-section { - margin: 0; - padding: 0; - border: 0; - box-shadow: none; -} - -.cbi-section > h3:first-child, -.panel-title { - font-size: 1.4rem; - line-height: 1; - display: block; - width: 100%; - margin: 0; - margin-bottom: 0; - padding: 1.25rem 2rem; - color: #32325d; - color: var(--gray-dark); -} - -.cbi-section > h3:first-child, -.cbi-section > h4:first-child, -.cbi-section > p:first-child, -[data-tab-title] > h3:first-child, -[data-tab-title] > h4:first-child, -[data-tab-title] > p:first-child { - padding: 0.5rem; -} - -table { - border-spacing: 0; - border-collapse: collapse; -} - -table, -.table { - overflow-y: hidden; - width: 100%; -} - -table > tbody > tr > td, -table > tbody > tr > th, -table > tfoot > tr > td, -table > tfoot > tr > th, -table > thead > tr > td, -table > thead > tr > th, -.table > .tbody > .tr > .td, -.table > .tbody > .tr > .th, -.table > .tfoot > .tr > .td, -.table > .tfoot > .tr > .th, -.table > .thead > .tr > .td, -.table > .thead > .tr > .th, -.table > .tr > .td.cbi-value-field, -.table > .tr > .th.cbi-section-table-cell { - padding: 0.5rem; -} - -.container > .cbi-section:first-of-type > .table[width="100%"] > .tr > .td { - padding: 0.6rem; -} - -.cbi-section-table-cell { - line-height: 1.1; - align-self: flex-end; - flex: 1 1 auto; -} - -tr > td, -tr > th, -.tr > .td, -.tr > .th, -.cbi-section-table-row::before, -#cbi-wireless > #wifi_assoclist_table > .tr:nth-child(2) { - padding: 1rem 1rem 1rem 1rem; -} - -#cbi-wireless .td, -#cbi-network .tr:first-child > .td, -.table[width="100%"] > .tr:first-child > .td, -[data-page="admin-network-diagnostics"] .tr > .td, -.tr.table-titles > .th, -.tr.cbi-section-table-titles > .th { - border-top: 0 !important; - padding: 1.1em 1rem; - line-height: 1.3rem; -} - -.cbi-tab-descr { - padding: 1rem; -} - -.table[width="100%"] > .tr:first-child > .td { - margin: auto 0; -} - -.cbi-section-table-row { - margin-bottom: 1rem; - text-align: center !important; - background: #f4f4f4; -} - -.cbi-section-table-row:last-child { - margin-bottom: 0; -} - -.cbi-section-table-row > .cbi-value-field .cbi-dropdown, -.cbi-section-table-row > .cbi-value-field .cbi-input-select, -.cbi-section-table-row > .cbi-value-field .cbi-input-text, -.cbi-section-table-row > .cbi-value-field .cbi-input-password { - width: 100%; - min-width: 0 !important; -} - -.cbi-section-table-row > .cbi-value-field [data-dynlist] > input, -.cbi-section-table-row > .cbi-value-field input.cbi-input-password { - width: calc(100% - 1.5rem); -} - -.cbi-section-table-row .td { - text-align: center !important; -} - -table > tbody > tr, -div > .table > .tr,.cbi-map >.cbi-section .cbi-value { - background-color: #fff; - transition: background-color .25s -} - -table > tbody > tr:nth-of-type(4n+2), -div > .table > .tr:nth-of-type(4n+2),.cbi-map >.cbi-section .cbi-value:nth-of-type(2n) { - background-color: #e5effd; -} - -table > tbody > tr:nth-of-type(4n+2):hover, -div > .table > .tr:nth-of-type(4n+2):hover { - background-color: #d9e9ff; -} - -table > tbody > tr:nth-of-type(4n), -div > .table > .tr:nth-of-type(4n) { - background-color: rgba(223, 56, 18, 0.04); -} - -table > tbody > tr:nth-of-type(4n):hover, -div > .table > .tr:nth-of-type(4n):hover { - background-color: rgba(223, 56, 18, 0.09); -} - -.cbi-map >.cbi-section .cbi-value:nth-of-type(2n) { - background-color: #e5effdb8; -} - -.cbi-map >.cbi-section .cbi-value:nth-of-type(2n):hover { - background-color: #e5effd; -} - -/* fix multiple table */ -table table, -.table .table, -.cbi-value-field table, -.cbi-value-field .table, -td > table > tbody > tr > td, -.td > .table > .tbody > .tr > .td, -.cbi-value-field > table > tbody > tr > td, -.cbi-value-field > .table > .tbody > .tr > .td { - border: 0; -} -/* button style */ -.btn, -.cbi-button, -.item::after { - font-size: 0.8rem; - display: inline-block; - width: auto !important; - padding: 0 0.8rem; - cursor: pointer; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - transition: all 0.2s ease-in-out; - text-align: center; - vertical-align: middle; - text-decoration: none; - color: #fff; - border: 0; - border-radius: 0.2rem; - background-image: none; - -webkit-appearance: none; - -ms-touch-action: manipulation; - touch-action: manipulation; -} - -.cbi-button-up, -.cbi-button-down { - font-size: 1.2rem; - display: inline-block; - min-width: 0; - padding: 0.2rem 0.3rem; - color: transparent !important; - background: url(icons/arrow.svg) no-repeat center !important; - background-size: 12px 20px !important; -} - -.cbi-button-up { - transform: scaleY(-1); -} - -.cbi-button:not(select) { - -webkit-appearance: none !important; -} - -button:hover, -.btn:hover, -.cbi-button:hover, -.item:hover::after { - opacity: 0.7; - top: 0.1rem; -} - -.cbi-button-up:hover, -.cbi-button-up:focus { - opacity: 0.7; -} - -.btn:disabled, -.cbi-button:disabled { - cursor: not-allowed; - pointer-events: none; - opacity: 0.5; - box-shadow: none; -} -/* gray */ -.alert-message [class="btn"], -.modal div[class="btn"], -.cbi-button-find, -.cbi-button-link, -.cbi-button-up, -.cbi-button-down, -.cbi-button-neutral, -.cbi-button[name="zero"], -.cbi-button[name="restart"], -.cbi-button[onclick="hide_empty(this)"] { - color: #fff; - background-color: #A3AFBD !important; -} -/* dark blue */ -.btn.primary, -.cbi-page-actions .cbi-button-save, -.cbi-page-actions .cbi-button-apply + .cbi-button-save, -.cbi-button-add, -.cbi-button-save, -.cbi-button-positive, -.cbi-button-link, -.cbi-button[value="Enable"], -.cbi-button[value="Scan"], -.cbi-button[value^="Back"], -.cbi-button-neutral[onclick="handleConfig(event)"] { - font-weight: normal; - color: #fff; - border: none; - background-color: #23bd70 !important; -} -/* light blue */ -.cbi-page-actions .cbi-button-apply, -.cbi-section-actions .cbi-button-edit, -.cbi-button-edit, -.cbi-button-apply, -.cbi-button-reload, -.cbi-button-action, -.cbi-button[value="Submit"], -.cbi-button[value="Upload"], -.cbi-button[value$="Apply"], -.cbi-button[onclick="addKey(event)"] { - font-weight: normal; - color: #fff; - background-color: #5A8DEE !important; -} -/* red */ -.btn.danger, -.cbi-section-remove > .cbi-button, -.cbi-button-remove, -.btn[onclick="handleOpkg(event)"], -.cbi-button-reset, -.cbi-button-negative, -.cbi-button[value="Stop"], -.cbi-button[value="Kill"], -.cbi-button[onclick="reboot(this)"], -.cbi-button-neutral[value="Restart"] { - font-weight: normal; - color: #fff; - border: none; - background-color: #fdb75a !important; -} -/* yellow */ -.btn[value="Dismiss"], -.cbi-button[value="Terminate"], -.cbi-button[value="Reset"], -.cbi-button[value="Disabled"], -.cbi-button[onclick^="iface_reconnect"], -.cbi-button[onclick="handleReset(event)"], -.cbi-button-neutral[value="Disable"] { - font-weight: normal; - color: #fff; - border: none; - background-color: #23bd70 !important; -} -/* green */ -.cbi-button-success, -.cbi-button-download, -.cbi-button[name="backup"], -.cbi-button[value="Download"], -.cbi-button[value="Save mtdblock"] { - font-weight: normal; - color: #fff; - background-color: #5cb85c !important; -} - -.cbi-page-actions .cbi-button-link:first-child { - float: left; -} - -.a-to-btn { - text-decoration: none; -} - -.cbi-value-field .cbi-button-add { - font-weight: bold; - margin: 9px 0 4px 3px; - padding: 1px 6px; -} - -.tabs > li, -.cbi-tabmenu > li { - display: inline-block; - padding: 0; - margin: 0; - cursor: pointer; -} - -.tabs > li,.cbi-tabmenu > li { - border-bottom: 0.2rem solid transparent; - background-color: #fff; -} - -.tabs > li[class~="active"], -.tabs > li:hover { - border-bottom-color: #5A8DEE; - background-color: #669bff36; -} - -.tabs > li:hover { - cursor: pointer; -} - -.tabs > li > a, -.cbi-tabmenu > li > a { - padding: 0.8rem 1.9rem; - text-decoration: none; - color: #404040; - display: inline-block; -} - -.tabs > li[class~="active"] > a { - color: #5A8DEE; - color: #5A8DEE; -} - -ul.tabs,.tabmenu .tabs,#tabmenu .tabs,ul.cbi-tabmenu { - padding-left: 2.5%; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; - border-bottom: 0; - margin-bottom: 10px; - background-color: #fff; - padding-top: 1rem; -} - -#packages{ - margin-left: -2%; - width: 105%; -} - -#packages td.col-10 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - max-width: 30em; - overflow: hidden; -} - -.cbi-tabmenu > li:hover { - background-color: rgba(246,178,181,0.2); -} - -.cbi-tabmenu > li[class~="cbi-tab"] { - background-color: rgba(246,178,181,0.2); - border-bottom-color: #ff9b84; -} - -.cbi-tabmenu > li[class~="cbi-tab"] a { - color: #ee6e73; -} - -.cbi-section .cbi-section-remove:nth-of-type(2n), -.container > .cbi-section .cbi-section-node:nth-of-type(2n) { - background-color: #f9f9f9; -} -[data-tab-title] { - overflow: hidden; - height: 0; - opacity: 0; - margin: 0; - padding: 0rem 0rem !important; -} -[data-tab-title] p { - margin-left: 1rem; - margin-bottom: 1rem; -} -[data-tab-active="true"] { - overflow: visible; - height: auto; - opacity: 1; - transition: opacity 0.25s ease-in; - margin: inherit !important; -} - -.cbi-section-node-tabbed { - margin-top: 0; - padding: 0; - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; -} - -.cbi-value-field, -.cbi-value-description { - display: table-cell; - position: relative; - margin-top: 1rem; - margin-bottom: 1rem; -} - -.cbi-value-field abbr, -.cbi-value-description abbr { - color: #32325d; - color: var(--gray-dark); -} - -.cbi-value-description { - line-height: inherit !important; -} - -.cbi-value-title { - display: table-cell; - float: left; - width: 15rem; - padding-right: 2rem; - text-align: right; - word-wrap: break-word; -} - -.cbi-value { - display: inline-block; - width: 100%; - padding: 0.5rem 1rem; - line-height: 2.4rem; -} - -.cbi-value-field >* { - line-height: 1.3rem; -} - -.cbi-value ul { - line-height: 1.25; -} - -.cbi-value-field .cbi-dropdown, -.cbi-value-field .cbi-input-select, -.cbi-value input[type="text"], -.cbi-value input[type="password"] { - min-width: 18rem; -} - -#cbi-firewall-zone .cbi-input-select, -#cbi-network-switch_vlan .cbi-input-select { - min-width: 11rem; -} - -#cbi-network-switch_vlan .cbi-input-text { - max-width: 3rem; -} - -.cbi-input-invalid { - color: #f5365c; - border-bottom-color: #f5365c; -} - -.cbi-section-error { - font-weight: bold; - line-height: 1.42857143; - margin: 18px; - padding: 6px; - border: thin solid #f5365c; - border-radius: 3px; - background-color: #fce6e6; -} - -.cbi-section-error ul { - margin: 0 0 0 20px; -} - -.cbi-section-error ul li { - font-weight: bold; - color: #f5365c; -} - -.td[data-title]::before { - font-weight: bold; - display: none; - padding: 0.25rem 0; - content: attr(data-title) ":\20"; - text-align: left; - white-space: nowrap; -} - -.tr.placeholder .td[data-title]::before { - display: none; -} - -.tr[data-title]::before, -.tr.cbi-section-table-titles.named::before { - font-weight: bold; - display: table-cell; - align-self: center; - flex: 1 1 5%; - padding: 0.25rem; - content: attr(data-title) "\20"; - text-align: center; - vertical-align: middle; - white-space: normal; - word-wrap: break-word; -} - -.cbi-rowstyle-1 { - background-color: #f9f9f9; -} - -.cbi-rowstyle-2 { -} - -.cbi-rowstyle-2 .cbi-button-up, -.cbi-rowstyle-2 .cbi-button-down, -body:not(.Interfaces) .cbi-rowstyle-2:first-child { - background-color: #fff !important; -} - -.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { - width: auto !important; -} - -.td.cbi-section-actions { - text-align: right !important; - vertical-align: middle; -} - -.td.cbi-section-actions > * { - display: inline-flex; -} - -.td.cbi-section-actions > * > *, -.td.cbi-section-actions > * > form > * { - margin: 0 5px; - display: flex; - align-items: center; -} - -.td.cbi-section-actions > * > form { - display: inline-flex; - margin: 0; -} -/* lists */ -.cbi-dynlist { - line-height: 1.3; - flex-direction: column; - min-height: 30px; - cursor: text; -} - -.cbi-dynlist > .item { - position: relative; - max-width: 25rem; - margin-right: 2em; - margin-bottom: 0.3rem; - padding: 1em 0.25em 0.25em 0; - pointer-events: none; - color: #8898aa; - border-bottom: 2px solid #5A8DEE; - border-bottom: 2px solid #5A8DEE; - outline: 0; -} - -.cbi-dynlist[name="sshkeys"] > .item { - max-width: none; -} - -.cbi-dynlist > .item::after { - font-weight: bold; - position: absolute; - right: -2em; - bottom: 0; - display: inline-flex; - min-height: 17px; - padding: 0 6px; - content: "\00D7"; - pointer-events: auto; - color: #fff; - border: thin solid #f5365c; - border: thin solid var(--red); - background-color: #f5365c; - background-color: var(--red); -} - -.cbi-dynlist > .item > span { - white-space: normal; - word-break: break-word; -} - -.cbi-dynlist > .add-item { - display: inline-flex; - align-items: center; - width: 100%; - min-width: 16rem; -} - -.cbi-dynlist > .add-item:not([ondrop]) > input { - overflow: hidden; - width: 100%; - min-width: 15rem; - white-space: nowrap; - text-overflow: ellipsis; -} - -.cbi-dynlist > .add-item[ondrop] > input { - min-width: 13rem; -} - -.cbi-dynlist, -.cbi-dropdown { - position: relative; - display: inline-flex; - padding: 0.2rem; -} - -.cbi-dropdown[placeholder*="select"] { - max-width: 25rem; - margin-top: -3px; -} - -.cbi-dropdown > ul { - display: flex; - overflow-x: hidden; - overflow-y: auto; - width: 100%; - margin: 0 !important; - padding: 0; - list-style: none; - outline: 0; -} - -#cbi-adblock-global-adb_sources .cbi-dropdown > ul.preview { - display: none; -} - -.cbi-button-apply > ul.preview { - display: none; -} - -.cbi-button-apply > ul.preview li { - color: #fff; -} - -.cbi-button-apply > ul:first-child li { - color: #fff; -} - -.cbi-dropdown > .open { - flex-basis: 15px; -} - -.cbi-dropdown > .open, -.cbi-dropdown > .more { - font-size: 1rem; - font-weight: 900; - display: flex; - flex-direction: column; - flex-grow: 0; - flex-shrink: 0; - justify-content: center; - padding: 0 0.25em; - cursor: default; - text-align: center; - outline: 0; - line-height: 1rem; -} - -.cbi-dropdown > .more, -.cbi-dropdown > ul > li[placeholder] { - font-weight: bold; - display: none; - color: #777; - text-shadow: 1px 1px 0 #fff; -} - -.cbi-dropdown > ul > li { - display: none; - overflow: hidden; - align-items: center; - align-self: center; - flex-grow: 1; - flex-shrink: 1; - white-space: nowrap; - text-overflow: ellipsis; -} - -.cbi-dropdown > ul > li .hide-open { - display: initial; -} - -.cbi-dropdown > ul > li .hide-close { - display: none; -} - -.cbi-dropdown > ul > li[display]:not([display="0"]) { - border-left: thin solid #ccc; -} - -.cbi-dropdown[empty] > ul { - max-width: 1px; -} - -.cbi-dropdown > ul > li > form { - display: none; - margin: 0; - padding: 0; - pointer-events: none; -} - -.cbi-dropdown > ul > li img { - margin-right: 0.25em; - vertical-align: middle; -} - -.cbi-dropdown > ul > li > form > input[type="checkbox"] { - height: auto; - margin: 0; - display:inline-block; -} - -.cbi-dropdown > ul > li input[type="text"] { - height: 20px; -} - -.cbi-dropdown[open] > ul.dropdown { - position: absolute; - z-index: 1100; - display: block; - width: auto; - min-width: 100%; - max-width: none; - max-height: 200px; - border: thin solid #918e8c; - background: #f6f6f6; - box-shadow: 0 0 4px #918e8c; - color: var(--main-menu-color); - left: 0; -} - -.cbi-dropdown[open] > ul.dropdown li { - color: #000; -} - -.cbi-dropdown > ul > li[display], -.cbi-dropdown[open] > ul.preview, -.cbi-dropdown[open] > ul.dropdown > li, -.cbi-dropdown[multiple] > ul > li > label, -.cbi-dropdown[multiple][open] > ul.dropdown > li, -.cbi-dropdown[multiple][more] > .more, -.cbi-dropdown[multiple][empty] > .more { - display: flex; - align-items: center; - flex-grow: 1; -} - -.cbi-dropdown[empty] > ul > li, -.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], -.cbi-dropdown[multiple][open] > ul.dropdown > li > form { - display: block; -} - -.cbi-dropdown[open] > ul.dropdown > li .hide-open { - display: none; -} - -.cbi-dropdown[open] > ul.dropdown > li .hide-close { - display: initial; -} - -.cbi-dropdown[open] > ul.dropdown > li { - border-bottom: thin solid #ccc; - padding: 0.5rem 0.8rem; -} - -.cbi-dropdown[open] > ul.dropdown > li[selected] { - background: #b0d0f0; -} - -.cbi-dropdown[open] > ul.dropdown > li.focus { - background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); -} - -.cbi-dropdown[open] > ul.dropdown > li:last-child { - margin-bottom: 0; - border-bottom: 0; -} - -.cbi-dropdown[open] > ul.dropdown > li[unselectable] { - opacity: 0.7; -} - -.cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child { - width: 100%; -} - -.cbi-dropdown[disabled] { - pointer-events: none; - opacity: 0.6; -} - -.cbi-dropdown .zonebadge { - width: 100%; -} - -.cbi-dropdown[open] .zonebadge { - width: auto; -} -/* progressbar */ -.cbi-progressbar { - position: relative; - min-width: 170px; - height: 20px; - margin: 6px 0; - border: thin solid #999; - border-radius: 0.2rem; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); -} - -@keyframes progress-bar-stripes { - from { - background-position: 0.357rem 0; - } - - to { - background-position: 0 0; - } -} - -.cbi-progressbar > div { - width: 0; - height: 100%; - transition: width 0.25s ease-in; - background-color: #5A8DEE; - background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); - background-size: auto auto; - animation: progress-bar-stripes 1s linear infinite; -} - -.cbi-progressbar::after { - font-family: monospace; - font-size: 1em; - font-weight: bold; - font-size-adjust: 0.38; - line-height: normal; - position: absolute; - top: 2px; - right: 0; - bottom: 2px; - left: 0; - overflow: hidden; - content: attr(title); - text-align: center; - white-space: pre; - text-overflow: ellipsis; - color: #ff4500d1; -} - -#modal_overlay { - position: fixed; - z-index: 900; - top: 0; - right: 10000px; - bottom: 0; - left: -10000px; - overflow-y: scroll; - transition: opacity 0.125s ease-in; - opacity: 0; - background: rgba(0, 0, 0, 0.7); - -webkit-overflow-scrolling: touch; -} - -.modal { - display: flex; - align-items: center; - flex-wrap: wrap; - width: 90%; - min-width: 270px; - max-width: 695px; - min-height: 32px; - margin: 25vh auto; - padding: 1em; - border-radius: 3px !important; - background: #fff; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); -} - -.modal > * { - line-height: normal; - flex-basis: 100%; - max-width: 100%; -} - -.modal > pre, -.modal > textarea { - font-size: 1rem; - font-size-adjust: 0.35; - overflow: auto; - margin-bottom: 0.5em; - padding: 8.5px; - cursor: auto; - white-space: pre-wrap; - color: #eee; - outline: 0; - background-color: #101010; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); -} - -.modal > h4 { - margin: 0.5em 0; -} - -.modal ul { - margin-left: 2.2em; -} - -.modal li { - list-style-type: square; - color: #808080; -} - -.modal p { - word-break: break-word; - margin: 1rem 0; -} - -h3+p,h4+p { - margin-top: 0 !important; -} - -.modal .label { - font-size: 0.6rem; - font-weight: normal; - padding: 0.1rem 0.3rem; - cursor: default; - border-radius: 0; - background: #9b9b9b; - color: #fff; -} - -.modal .label.notice { - color: #fff; - background: #5A8DEE; -} - -body.modal-overlay-active { - overflow: hidden; - height: 100vh; -} - -body.modal-overlay-active #modal_overlay { - right: 0; - left: 0; - opacity: 1; -} - -.spinning { - position: relative; - padding-left: 32px !important; -} - -.spinning::before { - position: absolute; - top: 0; - bottom: 0; - left: 0.2em; - width: 32px; - content: ""; - background: url(../resources/icons/loading.gif) no-repeat center; - background-size: 16px; -} -/* luci */ -.hidden { - display: none; -} - -.left, -.left::before { - text-align: left !important; -} - -.right, -.right::before { - text-align: right !important; -} - -.center, -.center::before { - text-align: center !important; -} - -.top { - align-self: flex-start !important; - vertical-align: top !important; -} - -.bottom { - align-self: flex-end !important; - vertical-align: bottom !important; -} - -.inline { - display: inline; -} - -.cbi-page-actions { - padding-top: 1rem; - text-align: right; -} - -.node-main-login .cbi-page-actions { - padding-right: 0; -} - -.cbi-page-actions > form[method="post"] { - display: inline-block; -} - -.th[data-type="button"], -.td[data-type="button"], -.th[data-type="fvalue"], -.td[data-type="fvalue"] { - flex: 1 1 2em; - text-align: center; -} - -.ifacebadge { - display: inline-flex; - padding: 0.5rem 0.8rem; - border-bottom: thin solid #ccc; - background: #eee; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -td > .ifacebadge, -.td > .ifacebadge { - font-size: 0.8rem; - background-color: #f0f0f0; -} - -.ifacebadge > em, -.ifacebadge > img { - display: inline-block; - align-self: flex-start; - margin: 0 0.2rem; -} - -.ifacebadge > img + img { - margin: 0 0.2rem 0 0; -} - -.network-status-table { - display: flex; - flex-wrap: wrap; -} - -.network-status-table .ifacebox { - flex-grow: 1; -} - -.network-status-table .ifacebox-body { - display: flex; - flex-direction: column; - height: 100%; -} - -.network-status-table .ifacebox-body > span { - flex: 10 10 auto; - height: 100%; -} - -.network-status-table .ifacebox-body > div { - display: flex; - flex-wrap: wrap; -} - -.network-status-table .ifacebox-body .ifacebadge { - align-items: center; - flex: 1 1 auto; - min-width: 220px; - margin: 0.5em 0em 0 0em; - padding: 0.5em; - background-color: #fff; -} -/* textarea */ -textarea { - font-family: monospace; - width: 95%; - min-width: 28rem; - padding: 0.8rem; - line-height: 1.6rem !important; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; - border: 0 !important; -} - -textarea:focus{ - outline: none; - border: 1px solid #5A8DEE !important; - box-shadow: 0 0px 5px 0 #5A8DEE; -} - -.cbi-section textarea { - margin: 0rem; -} - -#syslog { - font-size: small; - line-height: 1.25; - width: 100%; - padding: 1rem; - resize: none; - color: #eee; - border: 0; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; - background-color: #242424; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); - max-height: 100% !important; -} - -#syslog:focus { - outline: 0; -} -/* config changes */ -.uci-change-list { - font-family: monospace; -} - -.uci-change-list ins, -.uci-change-legend-label ins { - display: block; - padding: 2px; - text-decoration: none; - border: thin solid #0f0; - background-color: #cfc; -} - -.uci-change-list del, -.uci-change-legend-label del { - font-style: normal; - display: block; - padding: 2px; - text-decoration: none; - border: thin solid #f00; - background-color: #fcc; -} - -.uci-change-list var, -.uci-change-legend-label var { - font-style: normal; - display: block; - padding: 2px; - text-decoration: none; - border: thin solid #ccc; - background-color: #eee; -} - -.uci-change-list var ins, -.uci-change-list var del { - font-style: normal; - padding: 0; - white-space: pre; - border: 0; -} - -.uci-change-legend { - padding: 5px; -} - -.uci-change-legend-label { - float: left; - width: 150px; -} - -.uci-change-legend-label > ins, -.uci-change-legend-label > del, -.uci-change-legend-label > var { - display: block; - float: left; - width: 10px; - height: 10px; - margin-right: 4px; -} - -.uci-change-legend-label var ins, -.uci-change-legend-label var del { - line-height: 0.4; - border: 0; -} - -.uci-change-list var, -.uci-change-list del, -.uci-change-list ins { - padding: 0.5rem; -} -/* other fix */ -#iwsvg, -#iwsvg2, -#bwsvg { - border: thin solid #d4d4d4 !important; -} - -#iwsvg, -[data-page="admin-status-realtime-bandwidth"] #bwsvg { - border-top: 0 !important; -} - -.ifacebox { - line-height: 1.25; - display: inline-flex; - flex-direction: column; - min-width: 100px; -} - -.ifacebox-head { - padding: 0.25em; - background: #eee; -} - -.ifacebox-head.active { - background: #5A8DEE; -} - -.ifacebox-head.active * { - color: #fff; - color: var(--white); -} - -.ifacebox-body { - padding: 0.5em 2rem; - line-height: 1.6em; -} - -.cbi-image-button { - margin-left: 0.5rem; -} - -.zonebadge { - display: inline-block; - padding: 0.2rem 0.5rem; -} - -.zonebadge .ifacebadge { - margin: 0.1rem 0.2rem; - padding: 0.2rem 0.3rem; - border: thin solid #6c6c6c; -} - -.zonebadge > input[type="text"] { - min-width: 10rem; - margin-top: 0.3rem; - padding: 0.16rem 1rem; -} - -.zonebadge > em, -.zonebadge > strong { - display: inline-block; - margin: 0 0.2rem; -} - -.cbi-value-field .cbi-input-checkbox, -.cbi-value-field .cbi-input-radio { - margin-right: 5px; -} - -.cbi-value-field > ul > li { - display: flex; -} - -.cbi-value-field > ul > li > label { - margin-top: 0.5rem; -} - -.cbi-value-field > ul > li .ifacebadge { - margin-top: -0.5rem; - margin-left: 0.4rem; - background-color: #eee; -} - -.cbi-section-table-row > .cbi-value-field .cbi-dropdown { - min-width: 7rem; -} - -.cbi-section-create { - display: inline-flex; - align-items: center; - margin: 0.25rem 0 0.25rem 1rem; -} - -.cbi-section-create > * { - margin: 0.5rem; -} - -.cbi-section-remove { - padding: 0.5rem; -} - -div.cbi-value var, -td.cbi-value-field var, -.td.cbi-value-field var { - font-style: italic; - color: #0069d6; -} - -.cbi-optionals { - padding: 1rem 1rem 0 1rem; - border-top: thin solid #ccc; -} - -.cbi-dropdown-container { - position: relative; -} - -.cbi-tooltip-container, -span[data-tooltip], -span[data-tooltip] .label { - cursor: help !important; -} - -.cbi-tooltip { - position: absolute; - z-index: 1000; - left: -1000px; - padding: 2px 5px; - transition: opacity 0.25s ease-out; - white-space: pre; - pointer-events: none; - opacity: 0; - border-radius: 3px; - background: #fff; - box-shadow: 0 0 2px #444; -} - -.cbi-tooltip-container:hover .cbi-tooltip { - left: auto; - transition: opacity 0.25s ease-in; - opacity: 1; -} - -.zonebadge .cbi-tooltip { - margin: -1.5rem 0 0 -0.5rem; - padding: 0.25rem; - background: inherit; -} - -.zonebadge-empty { - color: #404040; - background: repeating-linear-gradient(45deg, rgba(204, 204, 204, 0.5), rgba(204, 204, 204, 0.5) 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px); -} - -.zone-forwards { - display: flex; - min-width: 10rem; -} - -.zone-forwards > * { - flex: 1 1 45%; -} - -.zone-forwards > span { - flex-basis: 10%; - padding: 0 0.25rem; - text-align: center; -} - -.zone-forwards .zone-src, -.zone-forwards .zone-dest { - display: flex; - flex-direction: column; -} - -.label,#indicators span { - font-size: 0.8rem; - padding: 0.3rem 0.8rem; - white-space: nowrap; - text-decoration: none; - text-transform: uppercase; - border-radius: 3px; - text-shadow: none; - margin: 0 0.5rem; - color: #fff; - background: #5A8DEE; -} - -#indicators span[data-indicator="poll-status"] { - color: #FDAC41 !important; - background-color: #FFEED9; -} - -#indicators span[data-indicator="uci-changes"] { - color: #39DA8A !important; - background-color: #D2FFE8; -} - -input[type="checkbox"], -input[type="radio"] { - position: relative; - right: 0.2rem; - margin: 0; - vertical-align: bottom; -} - -label[data-index][data-depends] { - padding-right: 2em; -} - -.showSide { - display: none; -} - -.darkMask { - position: fixed; - z-index: 99; - display: none; - width: 100%; - height: 100%; - content: ""; - top: 0; - background-color: rgba(0, 0, 0, 0.56); -} -/* diagnostics */ -#diag-rc-output > pre, -#command-rc-output > pre, -[data-page="admin-services-wol"] .notice code { - font-size: 1.2rem; - font-size-adjust: 0.35; - line-height: normal; - display: block; - overflow-y: hidden; - width: 100%; - padding: 8.5px; - white-space: pre; - color: #eee; - background-color: #101010; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); -} -[data-page="admin-network-diagnostics"] .table { - box-shadow: none; -} - -input[name="ping"], -input[name="traceroute"], -input[name="nslookup"] { - width: 80%; -} -/* fix Main Login */ -.node-main-login .main { - top: 0; - height: 100% !important; -} - -.node-main-login .main .main-left { - display: none; -} - -.node-main-login .main .main-right { - width: 100%; - text-align: center; - overflow: hidden; -} - -.node-main-login .main .main-right header { - background: none !important; - box-shadow: none !important; - display: none !important; -} - -.node-main-login .main .main-right .login-bg { - display: block; - position: fixed; - width: 100%; - height: 100%; - left: 0px; - top: 0px; - background-size: cover; - background-color: #000; - background-position: top center; - transition: all 0.5s; -} - -.node-main-login .main .main-right .login-bg.blur { - transform: scale(1.05); - -webkit-filter: blur(5px); - /* Chrome, Safari, Opera */ - filter: blur(5px); -} - -.node-main-login .main .main-right #maincontent { - height: 100%; - padding-top: 23vh; - padding-bottom:1rem; - margin-top: 0rem; - background-color: transparent !important; - text-align: center; - display: inline-block; - z-index: 999; -} - -.node-main-login .main .main-right #maincontent .container { - display: inline-block; - padding: 1rem 1.2rem; - position: relative; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; - text-align: left; - background: rgba(255, 255, 255, 0.75); - margin: 0; -} - -.node-main-login .main .main-right #maincontent .alert-message.warning { - position: absolute; - color: #fff; - width: calc(100%); - box-sizing: border-box; - margin-top: -3.5rem; - border-radius: 5px !important; - padding: 0.5rem 1rem; - text-align: center; - background-color: #eea236 !important; -} - -.node-main-login .main .main-right #maincontent .alert-message p { - color: #fff; - font-weight: normal; - font-size: 0.83rem; -} - -.node-main-login .main .main-right #maincontent .alert-message.error { - position: absolute; - color: #fff; - width: calc(100%); - background-color: #f0ad4e; - border-color: #eea236; - box-sizing: border-box; - margin-top: -7.5rem; - border-radius: 5px !important; - padding: 1rem 1rem 0.5rem 1rem; - text-align: center; -} - -.node-main-login .main .main-right #maincontent .alert-message.error p { - color: #fff; -} - -.alert-message p { - text-align: center; -} - -.node-main-login .main .main-right #maincontent .alert-message.error h4 { - font-size: 1rem; -} - -.node-main-login .main .main-right #maincontent .alert-message.error .btn { - height: auto; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map h2 { - display: block; - margin: 10px auto 10px auto; - padding: 0; - text-align: center; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-map-descr { - text-align: center; - padding: 1rem; - color: #8898aa; - font-size: 1.2rem; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section { - padding: 0.5rem; - margin-top: 0 !important; - background: none !important; - box-shadow: none !important; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node { - padding: 0; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value { - display: block; - padding: 0; - background: none; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value * { - display: inline-block !important; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-title { - display: none !important; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field { - position: relative; - width: 18rem; - margin-bottom: 1em; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field input { - font-size: 1rem; - line-height: 1.5; - display: block; - width: 100%; - height: calc(2.75rem + 2px); - padding: 0.625rem 0.75rem; - transition: all 0.15s cubic-bezier(0.68, -0.55, 0.265, 1.55); - color: #8898aa; - background-clip: padding-box; - box-sizing: border-box; - padding-left: 3em !important; - margin: 0; - text-align: center; - text-indent: -3rem; - background: transparent content-box !important; - box-sizing: border-box; - height: 0 !important; - padding: 1.38rem 0; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field input:focus { - color: #8898aa; - outline: 0; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field:before { - font-family: 'argon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e971"; - color: #adb5bd; - font-size: 1.5rem; - position: absolute; - z-index: 100; - left: 10px; - top: 10px; -} - -.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value.cbi-value-last .cbi-value-field:before { - content: "\e910"; -} - -.node-main-login .main .main-right #maincontent .container .cbi-page-actions { - text-align: center; - padding-top: 0; - margin-bottom: 20px; -} - -.node-main-login .main .main-right #maincontent .container .cbi-page-actions input { - padding: 0.7rem 5.5rem -} - -.node-main-login .main .main-right #maincontent .container .cbi-page-actions .cbi-button { - background-color: #5a8deec7; -} - -.node-main-login .main .main-right #maincontent .container .cbi-page-actions .cbi-button.cbi-button-reset { - display: none !important; -} - -.node-main-login .main .main-right #maincontent footer { - bottom: 0; - position: absolute; - width: 100%; - color: #fff; -} - -.node-main-login .main .main-right #maincontent footer a { - color: #fff; -} - -@media screen and (min-height: 585px) { - .node-main-login footer { - display: none; - position: absolute; - bottom: 0; - width: 100%; - } -} -/* fix status */ -.node-status-overview > .main fieldset:nth-child(4) .td:nth-child(2), -.node-status-processes > .main .table .tr .td:nth-child(3) { - white-space: normal; -} -/* fix system reboot */ -[data-page="admin-system-reboot"] p { - padding-left: 0rem; - color: #fff; -} -[data-page="admin-system-reboot"] .cbi-button { - background: #fb6340 !important; -} -[data-page="admin-system-reboot"] p > span { - position: relative; - top: 0.1rem; - left: 1rem; -} -/* samba */ -#cbi-samba [data-tab="template"] .cbi-value-field { - display: block; -} - -#cbi-samba [data-tab="template"] .cbi-value-title { - width: auto; - padding-bottom: 0.6rem; -} -/* admin-system-admin-password */ -[data-page="admin-system-admin"] .cbi-map h2, -[data-page="admin-system-admin-password"] .cbi-map h2, -[data-page="admin-system-admin"] .cbi-map .cbi-map-descr, -[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr { - margin-left: 1.5rem; - color: #32325d; - color: var(--gray-dark); -} -/* software */ - - -.controls { - margin: 0.5em 0 1em 0 !important; -} - -.controls > * > .btn:not([aria-label$="page"]) { - flex-grow: initial !important; - margin-top: 0.25rem; -} - -.controls > #pager > .btn[aria-label$="page"] { - font-size: 1.4rem; - font-weight: bold; -} - -.controls > * > label { - margin-bottom: 0.2rem; -} -[data-page="admin-system-opkg"] div.btn { - line-height: 3; - display: inline; -} -[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear) { - margin-top: 2rem; - padding-top: 0.1rem; -} - - -.cbi-tabmenu + .cbi-section { - margin-top: 0; -} -/* admin-system-crontab*/ -[data-page="admin-system-crontab"] #view p { - color: #fff; - margin-bottom: 1rem; -} -/*admin-system-flash*/ -[data-page="admin-system-flash"] .cbi-value { - padding: 0; -} -[data-page="admin-system-flash"] .cbi-section .cbi-section { - margin-top: 0; -} -[data-page="admin-system-flash"] legend { - display: block !important; - font-size: 1.2rem; - width: 100%; - display: block; - margin-bottom: 0; - padding: 1rem 0 1rem 1.5rem; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); - line-height: 1.5; - margin-bottom: 0rem; - letter-spacing: 0.1rem; - color: #32325d; - font-weight: bold; -} -[data-page="admin-system-flash"] .cbi-section-descr { - font-weight: 600; - padding: 1rem 0 1rem 1.5rem; - color: #525f7f; -} -/* wireless overview */ -#cbi-wireless > #wifi_assoclist_table > .tr { - box-shadow: inset 1px -1px 0 #ddd, inset -1px -1px 0 #ddd; -} - -#cbi-wireless > #wifi_assoclist_table > .tr.placeholder > .td { - right: 33px; - bottom: 33px; - left: 33px; - border-top: thin solid #ddd !important; -} - -#cbi-wireless > #wifi_assoclist_table > .tr.table-titles { - box-shadow: inset 1px 0 0 #ddd, inset -1px 0 0 #ddd; -} - -#cbi-wireless > #wifi_assoclist_table > .tr.table-titles > .th { - border-bottom: thin solid #ddd; - box-shadow: 0 -1px 0 0 #ddd; -} - -#wifi_assoclist_table > .tr > .td[data-title="RX Rate / TX Rate"] { - width: 23rem; -} -[data-page="admin-network-dhcp"] .cbi-value { - padding: 0; -} -[data-page="admin-network-dhcp"] [data-tab-active="true"] { - padding: 1rem 0 !important; -} -/* firewall */ -#iptables { - margin: 0; -} - -.Firewall form { - margin: 2rem 2rem 0 0; - padding: 0; - box-shadow: none; -} - -#cbi-firewall-redirect table *, -#cbi-network-switch_vlan table *, -#cbi-firewall-zone table * { - font-size: small; -} - -#cbi-firewall-redirect table input[type="text"], -#cbi-network-switch_vlan table input[type="text"], -#cbi-firewall-zone table input[type="text"] { - width: 5rem; -} - -#cbi-firewall-redirect table select, -#cbi-network-switch_vlan table select, -#cbi-firewall-zone table select { - min-width: 3.5rem; -} - -#cbi-network-switch_vlan .th, -#cbi-network-switch_vlan .td { - flex-basis: 12%; -} - -#cbi-firewall-zone .table, -#cbi-network-switch_vlan .table { - display: block; -} - -#cbi-firewall-zone .td, -#cbi-network-switch_vlan .td { - width: 100%; -} -[data-page="admin-network-firewall-custom"] #view p { - color: #fff; - margin-bottom: 1rem; -} -[data-page="admin-network-firewall-custom"] #view p textarea { - margin: 1.5rem; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; - width: 95% !important; -} -/* applyreboot fix */ -#applyreboot-container { - margin: 2rem; -} - -#applyreboot-section { - line-height: 300%; - margin: 2rem; -} -/* openvpn bug fix */ -.OpenVPN a { - line-height: initial !important; -} -/* custom commands */ -.commandbox { - width: 24% !important; - margin: 10px 0 0 10px !important; - padding: 0.5rem 1rem; - border-bottom: thin solid #ccc; - background: #eee; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.commandbox h3 { - line-height: normal !important; - overflow: hidden; - margin: 6px 0 !important; - white-space: nowrap; - text-overflow: ellipsis; -} - -.commandbox div { - left: auto !important; -} - -.commandbox code { - position: absolute; - overflow: hidden; - max-width: 60%; - margin-left: 4px; - padding: 2px 3px; - white-space: nowrap; - text-overflow: ellipsis; -} - -.commandbox code:hover { - overflow-y: auto; - max-height: 50px; - white-space: normal; -} - -.commandbox p:first-of-type { - margin-top: -6px; -} - -.commandbox p:nth-of-type(2) { - margin-top: 2px; -} -[data-page^="admin-system-commands"] .panel-title, -[data-page^="command-cfg"] .mobile-hide, -[data-page^="command-cfg"] .showSide { - display: none; -} - -#command-rc-output .alert-message { - line-height: 1.42857143; - position: absolute; - top: 40px; - right: 32px; - max-width: 40%; - margin: 0; - animation: anim-fade-in 1.5s forwards; - word-break: break-word; - opacity: 0; -} - -@keyframes anim-fade-in { - 100% { - opacity: 1; - } -} -/* other fix */ -input[type="checkbox"] { - appearance: none !important; - -webkit-appearance: none !important; - border: 1px solid #dee2e6; - width: 16px !important; - height: 16px !important; - padding: 0; - cursor: pointer; - transition: all 0.2s; -} -div[id^="cbid."]>input[type="checkbox"]{ - display:none; -} -.cbi-dropdown[open]>ul.dropdown>li label { - margin-left: .5rem; -} - -#cbi-adblock-global-adb_sources .cbi-dropdown-open .cbi-dropdown[open] > ul.dropdown{ - position:relative !important; - bottom:0 !important; -} - -#cbi-adblock-global-adb_sources .cbi-dropdown-open #cbi-adblock-global-adb_sources .preview,.cbi-dropdown-open .more,.cbi-dropdown-open .open{ -display:none !important; -} - -input[type="checkbox"]:checked { - border: 1px solid #5A8DEE; - background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important; - background-color: #5A8DEE; - background-size: 70%; - background-repeat: no-repeat; - background-position: center; -} - -@media screen and (max-width: 1600px) { - header > .fill > .container > #logo { - margin: 0 2.5rem 0 0.5rem; - } - - .main-left { - width: calc(0% + 13rem); - } - - .main-right { - width: calc(100% - 13rem); - } - - .label { - padding: 0.2rem 0.6rem; - } - - .cbi-value-title { - width: 15rem; - padding-right: 1.5rem; - } - - .cbi-value-field .cbi-dropdown, - .cbi-value-field .cbi-input-select, - .cbi-value input[type="text"], - .cbi-value input[type="password"] { - min-width: 15rem; - } - - #cbi-firewall-zone .cbi-input-select { - min-width: 9rem; - } - - .cbi-input-textarea { - font-size: small; - } - - .node-admin-status > .main fieldset li > a { - padding: 0.3rem 0.6rem; - } -} - -@media screen and (max-width: 1366px) { - header > .fill > .container { - cursor: default; - } - - .main-left { - width: calc(0% + 13rem); - } - - .main-right { - width: calc(100% - 13rem); - } - - .panel-title { - font-size: 1.1rem; - padding-bottom: 1rem; - } - - table { - font-size: 0.7rem !important; - width: 100%; - } - - .table .cbi-input-text { - width: 100%; - } - - .cbi-value-field .cbi-dropdown, - .cbi-value-field .cbi-input-select, - .cbi-value input[type="text"], - .cbi-value input[type="password"] { - min-width: 16rem; - } - - #cbi-firewall-zone .cbi-input-select { - min-width: 4rem; - } - - .main > .main-left > .nav > .slide > .slide-menu > li > a { - font-size: 0.8rem; - } - - #modal_overlay { - top: 0rem; - } - [ data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table) { - display: block; - } - [ data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table), - [data-page="admin-network-firewall-rules"] .table:not(.cbi-section-table), - [data-page="admin-network-hosts"] .table, - [data-page="admin-network-routes"] .table { - overflow-y: visible; - } - - .commandbox { - width: 32% !important; - } -} - -@media screen and (max-width: 1152px) { - header > .fill > .container > #logo { - display: none; - } - - header > .fill > .container > .brand { - position: relative; - } - - html, - .main { - overflow-y: visible; - } - - .main > .loading > span { - top: 25%; - } - - .main-left { - width: calc(0% + 13rem); - } - - .main-right { - width: calc(100% - 13rem); - } - - body:not(.logged-in) .showSide { - visibility: hidden; - width: 0; - margin: 0; - } - - .node-main-login > .main .cbi-value-title { - text-align: left; - } - - .cbi-value-title { - width: 10rem; - padding-right: 1rem; - } - - .cbi-value-field .cbi-dropdown, - .cbi-value-field .cbi-input-select, - .cbi-value input[type="text"] { - width: 16rem; - min-width: 16rem; - } - /*.cbi-value input[type="password"],*/ - .cbi-value input[name^="pw"], - .cbi-value input[data-update="change"]:nth-child(2) { - width: 13rem !important; - min-width: 13rem; - } - - #diag-rc-output > pre, - #command-rc-output > pre, - [data-page="admin-services-wol"] .notice code { - font-size: 1rem; - } - - .Interfaces .table { - overflow-x: hidden; - } - - #packages.table { - display: grid; - } - - .Overview .table[width="100%"] > .tr { - flex-wrap: nowrap; - } - - .tr.placeholder { - border-bottom: thin solid #ddd; - } - - .tr.placeholder > .td, - #cbi-firewall .tr > .td, - #cbi-network .tr:nth-child(2) > .td, - .cbi-section #wifi_assoclist_table .tr > .td { - border-top: 0; - } - -.node-admin-status.Overview .tr { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - - .th, - .td { - display: inline-block; - align-self: flex-start; - flex: 2 2 25%; - text-overflow: ellipsis; - word-wrap: break-word; - } - - .td select, - .td input[type="text"] { - width: 100%; - word-wrap: normal; - } - - .td [data-dynlist] > input, - .td input.cbi-input-password { - width: calc(100% - 1.5rem); - } - - .td[data-type="button"], - .td[data-type="fvalue"] { - flex: 1 1 12.5%; - text-align: left; - } - - .th.cbi-value-field, - .td.cbi-value-field, - .th.cbi-section-table-cell, - .td.cbi-section-table-cell { - flex-basis: auto; - padding-top: 1rem; - } - - .td.cbi-value-field, - .cbi-section-table-cell { - display: inline-block; - flex: 10 10 auto; - flex-basis: 50%; - text-align: center; - } - - .td.cbi-section-actions { - vertical-align: bottom; - } - - .tr.table-titles, - .tr.cbi-section-table-titles, - .tr.cbi-section-table-descr { - display: none; - } - - .tr[data-title]::before, - .tr.cbi-section-table-titles.named::before { - font-size: 0.9rem; - display: block; - flex: 1 1 100%; - border-bottom: thin solid rgba(0, 0, 0, 0.26); - background: #e9ecef; - } - - .td[data-title], - [data-page^="admin-status-realtime"] .td[id] { - text-align: left; - } - - .td[data-title]::before { - display: block; - } - - .cbi-button + .cbi-button { - margin-left: 0; - } - - .td.cbi-section-actions > * > *, - .td.cbi-section-actions > * > form > * { - margin: 2.1px 3px; - } - - .Firewall form { - position: static !important; - margin: 0 0 2rem 0; - padding: 2rem; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12); - } - - .Firewall form input { - width: 100% !important; - margin: 0; - margin-top: 1rem; - } - - .Firewall .center, - .Firewall .center::before { - text-align: left !important; - } - - .commandbox { - width: 100% !important; - margin-left: 0 !important; - } -#packages .tr { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} -#packages .td { - padding: 1em 2rem; -} -} - -@media screen and (max-width: 768px) { - header { - display: block; - } - - body { - font-size: 0.8rem; - } - - .tabs > li > a, .cbi-tabmenu > li > a { - padding: 0.7rem 1.2rem; - } - - .btn, button, .cbi-button, input[type=button], input[type=submit], input[type=reset] { - padding: 0.5rem 1.2rem !important; - } - - .cbi-progressbar::after { - font-size: 0.95em; - line-height: 1.5; - } - - .main-left { - position: fixed; - z-index: 100; - width: 0; - } - - .main-right { - width: 100%; - } - - .main-right > #maincontent { - margin-top: 0.5rem; - } - - .showSide { - padding: 0.1rem; - position: relative; - z-index: 99; - top: -0.7rem; - display: inline-block !important; - } - - .showSide::before { - font-family: 'argon' !important; - font-style: normal !important; - font-weight: normal !important; - font-variant: normal !important; - text-transform: none !important; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - content: "\e20e"; - font-size: 1.7rem; - } - - header > .fill > .container > .brand { - display: inline-block; - } - - .cbi-section > div { - overflow-x: auto; - } -} - -@media screen and (max-width: 600px) { - .mobile-hide { - display: none; - } - - #maincontent > .container { - margin: 1rem 0 1rem 0; - } - - .cbi-value-title { - text-align: left; - } - [ data-page="admin-system-flash"] legend { - padding: 1rem 0 1rem 1rem; - } - [ data-page="admin-system-flash"] .cbi-section-descr { - padding: 1rem 0 1rem 1rem; - } - [ data-page="admin-system-flash"] .cbi-value { - padding: 0 1rem; - } - [ data-page="admin-network-dhcp"] [data-tab-active="true"] { - padding: 1rem 1rem !important; - } - - body { - overflow-x: hidden; - } - - .node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field { - width: 16rem; - } - - .node-main-login footer { - display: none; - } -} - -@media screen and (min-width: 600px) { - ::-webkit-scrollbar { - width: 10px; - height: 10px; - } - - ::-webkit-scrollbar, - ::-webkit-scrollbar-corner { - background: transparent; - } - - ::-webkit-scrollbar-thumb { - background: #9e9e9e; - } - - ::-webkit-scrollbar-thumb:hover { - background: #757575; - } - - ::-webkit-scrollbar-thumb:active { - background: #424242; - } -} - -.cbi-button,.btn { - background-color: #23bd70; -} - -.cbi-button.reconnect { - background-color: #23bd70 !important; -} - -.cpu .cbi-progressbar > div { - background-color: #5A8DEE !important; -} - -.memory .cbi-progressbar > div { - background-color: #FDAC41 !important; -} - -.cbi-map style+fieldset.cbi-section:first-of-type { - box-shadow: none !important; - display: block; - text-align: center; - overflow: hidden; - margin: 0.5rem 0; - background: none; - padding: 0; - border:none; -} - -.cbi-map style+fieldset.cbi-section:first-of-type p font { - position: relative; - display: inline-block; - padding: 0 1rem; -} - -.cbi-map style+fieldset.cbi-section:first-of-type p font:before, .cbi-map style+fieldset.cbi-section:first-of-type p font:after { - border-color: #FDAC41 !important; - content: ""; - position: absolute; - top: 50%; - width: 9999px; - border-top: 2px solid #DFE3E7; -} - -.cbi-map style+fieldset.cbi-section:first-of-type p font:before { - right: 100%; -} - -.cbi-map style+fieldset.cbi-section:first-of-type p font:after { - left: 100%; -} - -.cbi-map style+fieldset.cbi-section:first-of-type p em { - display: block; -} - -.cbi-section .cbi-section { - box-shadow: none !important; -} -/* Checkboxes - ========================================================================== */ -/* Remove default checkbox */ - -[type="checkbox"] + label:not(.lever) { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -[type="checkbox"] + label:not(.lever):before, -[type="checkbox"]:not(.filled-in) + label:not(.lever):after { - content: ''; - position: absolute; - top: 0.4rem; - left: 0; - width: 15px; - height: 15px; - z-index: 0; - border: 2px solid #5a5a5a; - border-radius: 1px; - margin-top: 3px; - -webkit-transition: .2s; - transition: .2s; -} - -[type="checkbox"]:not(.filled-in) + label:not(.lever):after { - border: 0; - -webkit-transform: scale(0); - transform: scale(0); -} - -[type="checkbox"]:not(:checked):disabled + label:not(.lever):before { - border: none; - background-color: rgba(0, 0, 0, 0.42); -} - -[type="checkbox"].tabbed:focus + label:not(.lever):after { - -webkit-transform: scale(1); - transform: scale(1); - border: 0; - border-radius: 50%; - -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); - background-color: rgba(0, 0, 0, 0.1); -} - -[type="checkbox"]:checked + label:not(.lever):before { - top: 0.1rem; - left: -5px; - width: 9px; - height: 18px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid orangered; - border-bottom: 2px solid orangered; - -webkit-transform: rotate(40deg); - transform: rotate(40deg); - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"]:checked:disabled + label:before { - border-right: 2px solid rgba(0, 0, 0, 0.42); - border-bottom: 2px solid rgba(0, 0, 0, 0.42); -} - -/* Indeterminate checkbox */ -[type="checkbox"]:indeterminate + label:not(.lever):before { - top: -11px; - left: -12px; - width: 10px; - height: 22px; - border-top: none; - border-left: none; - border-right: 2px solid orangered; - border-bottom: none; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"]:indeterminate:disabled + label:not(.lever):before { - border-right: 2px solid rgba(0, 0, 0, 0.42); - background-color: transparent; -} - -[type="checkbox"].filled-in + label:not(.lever):after { - border-radius: 2px; -} - -[type="checkbox"].filled-in + label:not(.lever):before, -[type="checkbox"].filled-in + label:not(.lever):after { - content: ''; - left: 0; - position: absolute; - /* .1s delay is for check animation */ - -webkit-transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; - transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; - z-index: 1; -} - -[type="checkbox"].filled-in:not(:checked) + label:not(.lever):before { - width: 0; - height: 0; - border: 3px solid transparent; - left: 6px; - top: 10px; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"].filled-in:not(:checked) + label:not(.lever):after { - height: 20px; - width: 20px; - background-color: transparent; - border: 2px solid #5a5a5a; - top: 0px; - z-index: 0; -} - -[type="checkbox"].filled-in:checked + label:not(.lever):before { - top: 0; - left: 1px; - width: 8px; - height: 13px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #fff; - border-bottom: 2px solid #fff; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"].filled-in:checked + label:not(.lever):after { - top: 0; - width: 20px; - height: 20px; - border: 2px solid orangered; - background-color: orangered; - z-index: 0; -} - -[type="checkbox"].filled-in.tabbed:focus + label:not(.lever):after { - border-radius: 2px; - border-color: #5a5a5a; - background-color: rgba(0, 0, 0, 0.1); -} - -[type="checkbox"].filled-in.tabbed:checked:focus + label:not(.lever):after { - border-radius: 2px; - background-color: orangered; - border-color: orangered; -} - -[type="checkbox"].filled-in:disabled:not(:checked) + label:not(.lever):before { - background-color: transparent; - border: 2px solid transparent; -} - -[type="checkbox"].filled-in:disabled:not(:checked) + label:not(.lever):after { - border-color: transparent; - background-color: #949494; -} - -[type="checkbox"].filled-in:disabled:checked + label:not(.lever):before { - background-color: transparent; -} - -[type="checkbox"].filled-in:disabled:checked + label:not(.lever):after { - background-color: #949494; - border-color: #949494; -} - -.controls > *:nth-child(2), .controls > *:nth-child(3) { - position: relative; -} - -.controls>div .focus-input { - top: 1.53rem; -} - -#indicators { - cursor: pointer; - position: absolute; - top: 1.5rem; - right: 1.5rem; - z-index: 99; -} - -.cbi-section > h3:first-child, .panel-title { - font-size: 1.1rem !important; -} - -h2 { - font-size: 1.4rem !important; -} - -.main .main-left .nav li .slide-menu li { - padding: 0.4rem 0rem !important; -} - -h3 { - font-size: 1.1rem !important; - padding: 1rem 2rem !important; -} - -code,.cbi-progressbar::after { - font-size-adjust: none !important; - font-family: inherit !important; - font-size: 0.9em !important; -} -[data-page="admin-system-flash"] legend { - font-size: 1.1rem !important; - padding-bottom: 0.6rem !important; -} - -.main .main-left .nav>li>a:first-child::before { - font-size: 1.1rem !important; -} - -.td.version { - word-break: normal !important; -} - -.node-main-login .main .main-right .login-bg { - background-color: white !important; -} - -.cbi-map >.cbi-section .cbi-value { - padding-left: 1rem; - padding-right: 1rem; -} - -.cbi-section ~ .cbi-section> .panel-title { - padding-top: 0; -} - -#cbi-openclash .cbi-map-descr { - color: #404040 -} - -input,select { - height: 2.2rem; - background: none; -} - -input:not([type=button]):not([type=submit]):not([type=checkbox]),select { - border:0 !important; - background-image:linear-gradient(dodgerblue,dodgerblue),linear-gradient(#a9a9a9,#a9a9a9); - background-size:0 2px,100% 1px; - background-position:left bottom,center calc(100% - 1px); - background-repeat:no-repeat; - transition: all .3s !important; -} - -select:focus, input:not([type=button]):not([type=submit]):focus { - background-size: 100% 2px,100% 1px; - transition: all .3s !important; -} - -.btn,button, - .cbi-button,input[type=button],input[type=submit],input[type=reset] { - height: auto !important; - width: auto !important; - padding: 0.6rem 1.6rem; - line-height: 1rem; - webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); - border-radius: 2px; - transition: all .20s linear; - top: 0; - margin-left: 0.5rem; - position:relative; -} - -.btn:first-child,button:first-child, - .cbi-button:first-child,input[type=button]:first-child,input[type=submit]:first-child,input[type=reset]:first-child { - margin-left: 0; -} - -i input { - margin: 0 !important -} - -.controls > * > .btn { - flex-basis: auto !important; -} - - -.cbi-map >.cbi-section .cbi-section-table,.container .cbi-tabmenu,.container #tabmenu,.cbi-map >.cbi-section .table { - margin-left: -2%; - width: 105%; -} - -.admin-status-overview h2.content { - display: none; -} - -#view>.cbi-section:first-child { - padding-top: 0; -} - -.node-admin-status div { - border: none !important; -} - -.cbi-section-table .tr .td:first-child,.cbi-section-table .tr .th:first-child, -.table .tr .td:first-child,.table .tr .th:first-child, -.table .tr:before { - padding-left: 2rem !important; -} - -.node-admin-status .table .tr .td:first-child { - padding-left: 3rem !important; -} - -ul.errors li { - margin-bottom: 1rem; -} - -.Wireless .cbi-section { - padding: 0 2rem; -} - -.cbi-section-table-row > .cbi-value-field .cbi-input-select { - min-width: 5rem !important; -} - -#cbi-passwall .block h4 { - padding:0; -} - -input[type=password]+.cbi-button.cbi-button-neutral { - padding: 0 0.4rem; - color: #fff !important; -} - -.cbi-input-password[type=text]+.cbi-button.cbi-button-neutral { - padding: 0.2rem 0.5rem; -} - -.main-right>hr { - height: 6px; - background-color: rgba(255, 0, 27, 0.95); - background: linear-gradient(90deg,#e75239 0%,#e75239 12.5%,#ff961c 12.5%,#ff961c 25%,#ffcc27 25%,#ffcc27 37.5%,#fce62f 37.5%,#fce62f 50%,#cde35b 50%,#cde35b 62.5%,#82cc33 62.5%,#82cc33 75%,#41bece 75%,#41bece 87.5%,#049cdb 87.5%,#049cdb 100%); - background-position: 50% 0; - box-shadow: 0 1px 2px rgba(0,0,0,.0625) inset; - margin: 0 0 10px; - border: none; - opacity: 0.9; -} - -div[id^="cbi-unblockmusic"] .cbi-button { - top: -1.2rem; -} -[data-page^="admin-network-wifi"] form { - padding-left: 1.5rem; -} -[data-page^="admin-network-wifi"] form td { - padding-left: 1.5rem; -} - -#packages .tr>.td:last-child{ - padding-right:3%; -} -.cbi-section-table .tr>.td:last-child{ - padding-right:2rem; -} - -.command-output { - padding: 0 2rem; -} - -.chromeframe { - padding: 2rem 3rem; - margin: 0 auto; - font-size: 16px; - font-weight: bold; - color: #fff; - position: absolute; - top: 10rem; - width: 100%; - z-index: 9999; - text-align: center; - background: #5A8DEE; -} - -.chromeframe { - display: none; -} - -.chromeframe a { - color: orangered; -} - -.landscape { - position: absolute; - width: 100%; - height: 100%; -} - -[data-page="admin-network-wifi"] tr > td .cbi-button{ - margin-left: 0 !important; -} -[data-page="admin-network-wifi"] tr > td input[type="button"]{ - padding: 0.5rem 1rem !important; -} -table.interfaces .th{ - padding:1.1em 0.5rem !important; -} -.cbi-value>.cbi-value-field>div:first-child+br{ -display:none; -} - -.cbi-page-actions.control-group.fixed { - position: fixed; - bottom: 1.3rem; - right: 2rem; -} - -#cbi-vssr+.cbi-page-actions.control-group.fixed { - bottom: 4.8rem; -} - -#cbi-passwall+.cbi-page-actions.control-group.fixed { - bottom: 3.3rem; -} diff --git a/luci-theme-edge/htdocs/luci-static/edge/custom.css b/luci-theme-edge/htdocs/luci-static/edge/custom.css deleted file mode 100644 index c03f8db61..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/custom.css +++ /dev/null @@ -1,46 +0,0 @@ -:root { - --main-color: #09c; - --header-bg: #09c; - --header-color: #fff; - --bar-bg: #5e72e4; - --menu-bg-color: #fff; - --menu-color: #5f6368; - --menu-color-hover: #202124; - --main-menu-color: #202124; - --submenu-bg-hover: #d4d4d4; - --submenu-bg-hover-active: #09c; - - --blue: #5e72e4; - --indigo: #5603ad; - --purple: #8965e0; - --pink: #f3a4b5; - --red: #f5365c; - --orange: #fb6340; - --yellow: #ffd600; - --green: #2dce89; - --teal: #11cdef; - --cyan: #2bffc6; - --white: #fff; - --gray: #8898aa; - --gray-dark: #32325d; - --light: #96999c; - --lighter: #e9ecef; - --primary: #5e72e4; - --secondary: #f7fafc; - --success: #2dce89; - --info: #11cdef; - --warning: #fb6340; - --danger: #f5365c; - --dark: #212529; - --default: #172b4d; - --white: #fff; - --neutral: #fff; - --darker: black; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - - --font-body: "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"; -} diff --git a/luci-theme-edge/htdocs/luci-static/edge/favicon.ico b/luci-theme-edge/htdocs/luci-static/edge/favicon.ico deleted file mode 100644 index 4611336803d49af0896adf2698cfaec54e96b800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 BLQ((# diff --git a/luci-theme-edge/htdocs/luci-static/edge/fonts/argon.woff b/luci-theme-edge/htdocs/luci-static/edge/fonts/argon.woff deleted file mode 100644 index ef1e9c2c434f786a409d2e3ac47a5035872e98e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8808 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 b$ejqMF;>UORRG?q5=PhE&nt)jo%sI(Ce#aG diff --git a/luci-theme-edge/htdocs/luci-static/edge/glare.svg b/luci-theme-edge/htdocs/luci-static/edge/glare.svg deleted file mode 100644 index 6274ac991..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/glare.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg b/luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg deleted file mode 100644 index be864c5ac..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg b/luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg deleted file mode 100644 index 6ddd3b3ed..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js b/luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js deleted file mode 100644 index eeb0dff4f..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ - -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 - * https://github.com/LuttyYang/luci-theme-material/ - * - * Agron Theme - * https://demos.creative-tim.com/argon-dashboard/index.html - * - * Login background - * https://unsplash.com/ - * Font generate by Icomoon - * - * Licensed to the public under the Apache License 2.0 - */ - -document.addEventListener('luci-loaded', function(ev) { -(function ($) { - $(".main > .loading").fadeOut(); - - /** - * trim text, Remove spaces, wrap - * @param text - * @returns {string} - */ - function trimText(text) { - return text.replace(/[ \t\n\r]+/g, " "); - } - - var lastNode = undefined; - var mainNodeName = undefined; - - var nodeUrl = ""; - (function(node){ - var luciLocation; - if (node[0] == "admin"){ - luciLocation = [node[1], node[2]]; - }else{ - luciLocation = node; - } - - for(var i in luciLocation){ - nodeUrl += luciLocation[i]; - if (i != luciLocation.length - 1){ - nodeUrl += "/"; - } - } - })(luciLocation); - - /** - * get the current node by Burl (primary) - * @returns {boolean} success? - */ - function getCurrentNodeByUrl() { - var ret = false; - if (!$('body').hasClass('logged-in')) { - luciLocation = ["Main", "Login"]; - return true; - } - - return ret; - } - - /** - * get current node and open it - */ - if (getCurrentNodeByUrl()) { - mainNodeName = "node-" + luciLocation[0] + "-" + luciLocation[1]; - mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g, "_").toLowerCase(); - $("body").addClass(mainNodeName); - } - - /** - * Sidebar expand - */ - var showSide = false; - $(".showSide").click(function () { - if (showSide) { - $(".darkMask").stop(true).fadeOut("fast"); - $(".main-left").stop(true).animate({ - width: "0" - }, "200"); - $(".main-right").css("overflow-y", "visible"); - showSide = false; - } else { - $(".darkMask").stop(true).fadeIn("fast"); - $(".main-left").stop(true).animate({ - width: "13rem" - }, "200"); - $(".main-right").css("overflow-y", "hidden"); - showSide = true; - } - }); - - $(".darkMask").click(function () { - if (showSide) { - showSide = false; - $(".darkMask").stop(true).fadeOut("fast"); - $(".main-left").stop(true).animate({ - width: "0" - }, "fast"); - $(".main-right").css("overflow-y", "visible"); - } - }); - - $(window).resize(function () { - if ($(window).width() > 921) { - $(".main-left").css("width", ""); - $(".darkMask").stop(true); - $(".darkMask").css("display", "none"); - showSide = false; - } - }); - - /** - * fix legend position - */ - $("legend").each(function () { - var that = $(this); - that.after("" + that.text() + ""); - }); - - $(".cbi-section-table-titles, .cbi-section-table-descr, .cbi-section-descr").each(function () { - var that = $(this); - if (that.text().trim() == ""){ - that.css("display", "none"); - } - }); - - $(".main-right").focus(); - $(".main-right").blur(); - $("input").attr("size", "0"); - $(".cbi-button-up").val("__"); - $(".cbi-button-down").val("__"); - $(".slide > a").removeAttr("href"); - - if (mainNodeName != undefined) { - console.log(mainNodeName); - switch (mainNodeName) { - case "node-status-system_log": - case "node-status-kernel_log": - $("#syslog").focus(function () { - $("#syslog").blur(); - $(".main-right").focus(); - $(".main-right").blur(); - }); - break; - case "node-status-firewall": - var button = $(".node-status-firewall > .main fieldset li > a"); - button.addClass("cbi-button cbi-button-reset a-to-btn"); - break; - case "node-system-reboot": - var button = $(".node-system-reboot > .main > .main-right p > a"); - button.addClass("cbi-button cbi-input-reset a-to-btn"); - break; - } - } - - var getaudio = $('#player')[0]; - /* Get the audio from the player (using the player's ID), the [0] is necessary */ - var audiostatus = 'off'; - /* Global variable for the audio's status (off or on). It's a bit crude but it works for determining the status. */ - - - $(document).on('click touchend', '.speaker', function() { - /* Touchend is necessary for mobile devices, click alone won't work */ - if (!$('.speaker').hasClass("speakerplay")) { - if (audiostatus == 'off') { - $('.speaker').addClass('speakerplay'); - getaudio.load(); - getaudio.play(); - audiostatus = 'on'; - return false; - } else if (audiostatus == 'on') { - $('.speaker').addClass('speakerplay'); - getaudio.play() - } - } else if ($('.speaker').hasClass("speakerplay")) { - getaudio.pause(); - $('.speaker').removeClass('speakerplay'); - audiostatus = 'on'; - } - }); - - $('#player').on('ended', function() { - $('.speaker').removeClass('speakerplay'); - /*When the audio has finished playing, remove the class speakerplay*/ - audiostatus = 'off'; - /*Set the status back to off*/ - }); - setTimeout(function(){ -$("input[type='checkbox']").filter(function () { - return (!$(this).next("label").length) -}).show(); - }, 0); - -var options = { attributes: true}; -function callback() { -$("input[type='checkbox']").filter(function () { - return (!$(this).next("label").length) -}).show(); -} -var mutationObserver = new MutationObserver(callback); - mutationObserver.observe($("body")[0], options); - $(".cbi-value").has("textarea").css("background","none"); -if(document.body.scrollHeight > window.innerHeight){ - $(".cbi-page-actions.control-group").addClass("fixed") -} -})(jQuery); -}); \ No newline at end of file diff --git a/luci-theme-edge/htdocs/luci-static/edge/landscape.css b/luci-theme-edge/htdocs/luci-static/edge/landscape.css deleted file mode 100644 index b55ab6957..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/landscape.css +++ /dev/null @@ -1,76 +0,0 @@ - -#CrossFade { - background: #fff; - position: absolute; - width: 100%; - height: 100%; - overflow: hidden; -} -#CrossFade img { - position: absolute; - min-width: 100%; - min-height: 100%; - width:100%; - background: #fff; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - opacity: 0; - -webkit-transform: scale(1.4) rotate(12deg); - transform: scale(1.4) rotate(12deg); - -webkit-animation: CrossFade 12s infinite; - animation: CrossFade 12s infinite; -} -#CrossFade img:nth-child(3) { - -webkit-animation-delay: 8s; - animation-delay: 8s; -} -#CrossFade img:nth-child(2) { - -webkit-animation-delay: 4s; - animation-delay: 4s; -} -#CrossFade img:nth-child(1) { - -webkit-animation-delay: 0s; - animation-delay: 0s; -} - -@-webkit-keyframes CrossFade { - 33.3% { - opacity: 1; - -webkit-transform: scale(1) rotate(0); - transform: scale(1) rotate(0); - } - 45% { - opacity: 0; - } -} -@keyframes CrossFade { - 33.3% { - opacity: 1; - -webkit-transform: scale(1) rotate(0); - transform: scale(1) rotate(0); - } - 45% { - opacity: 0; - } -} - -.speaker { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARAAAACACAYAAAG0HAZ0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEFERTNEQzA3QTMxMTFFMzgzNTFFRDRCMzk1MDA0NUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEFERTNEQzE3QTMxMTFFMzgzNTFFRDRCMzk1MDA0NUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowQURFM0RCRTdBMzExMUUzODM1MUVENEIzOTUwMDQ1QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowQURFM0RCRjdBMzExMUUzODM1MUVENEIzOTUwMDQ1QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvEtsecAABjVSURBVHjaYvz//z/D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); - background-repeat: no-repeat; - background-size: 200%; - background-position: 100% 0; - height: 34px; - width: 28px; - cursor: pointer; - display: block; - position: absolute; - top: 20px; - right: 20px; - display: block; - z-index:9999; - opacity:.5; -} - -.speakerplay { - background-position: 0 0; -} diff --git a/luci-theme-edge/htdocs/luci-static/edge/logo.png b/luci-theme-edge/htdocs/luci-static/edge/logo.png deleted file mode 100644 index 910850980a4dd721d257d7d37914dcd212dcedab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14025 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 R7gCOf0+v&gg-M$R{a@rz6L - - - - - - - - - - - - - \ No newline at end of file diff --git a/luci-theme-edge/htdocs/luci-static/edge/waves.css b/luci-theme-edge/htdocs/luci-static/edge/waves.css deleted file mode 100644 index 5572ae0fc..000000000 --- a/luci-theme-edge/htdocs/luci-static/edge/waves.css +++ /dev/null @@ -1,135 +0,0 @@ -/*! - * Waves v0.7.6 - * http://fian.my.id/Waves - * - * Copyright 2014-2018 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE */ -.waves-effect { - position: relative; - cursor: pointer; - display: inline-block; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: transparent; -} -.waves-effect .waves-ripple { - position: absolute; - border-radius: 50%; - width: 100px; - height: 100px; - margin-top: -50px; - margin-left: -50px; - opacity: 0; - background: rgba(0, 0, 0, 0.2); - background: -webkit-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - background: -o-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - background: -moz-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - background: radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - -webkit-transition: all 0.5s ease-out; - -moz-transition: all 0.5s ease-out; - -o-transition: all 0.5s ease-out; - transition: all 0.5s ease-out; - -webkit-transition-property: -webkit-transform, opacity; - -moz-transition-property: -moz-transform, opacity; - -o-transition-property: -o-transform, opacity; - transition-property: transform, opacity; - -webkit-transform: scale(0) translate(0, 0); - -moz-transform: scale(0) translate(0, 0); - -ms-transform: scale(0) translate(0, 0); - -o-transform: scale(0) translate(0, 0); - transform: scale(0) translate(0, 0); - pointer-events: none; -} -.waves-effect.waves-light .waves-ripple { - background: rgba(255, 255, 255, 0.4); - background: -webkit-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - background: -o-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - background: -moz-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); - background: radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); -} -.waves-effect.waves-classic .waves-ripple { - background: rgba(0, 0, 0, 0.2); -} -.waves-effect.waves-classic.waves-light .waves-ripple { - background: rgba(255, 255, 255, 0.4); -} -.waves-notransition { - -webkit-transition: none !important; - -moz-transition: none !important; - -o-transition: none !important; - transition: none !important; -} -.waves-button, -.waves-circle { - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); -} -.waves-button, -.waves-button:hover, -.waves-button:visited, -.waves-button-input { - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - border: none; - outline: none; - color: inherit; - background-color: rgba(0, 0, 0, 0); - font-size: 1em; - line-height: 1em; - text-align: center; - text-decoration: none; - z-index: 1; -} -.waves-button { - padding: 0.85em 1.1em; - border-radius: 0.2em; -} -.waves-button-input { - margin: 0; - padding: 0.85em 1.1em; -} -.waves-input-wrapper { - border-radius: 0.2em; - vertical-align: bottom; -} -.waves-input-wrapper.waves-button { - padding: 0; -} -.waves-input-wrapper .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; -} -.waves-circle { - text-align: center; - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - border-radius: 50%; -} -.waves-float { - -webkit-mask-image: none; - -webkit-box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12); - box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12); - -webkit-transition: all 300ms; - -moz-transition: all 300ms; - -o-transition: all 300ms; - transition: all 300ms; -} -.waves-float:active { - -webkit-box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3); - box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3); -} -.waves-block { - display: block; -} diff --git a/luci-theme-edge/htdocs/luci-static/resources/menu-edge.js b/luci-theme-edge/htdocs/luci-static/resources/menu-edge.js deleted file mode 100644 index cc4d4b6b6..000000000 --- a/luci-theme-edge/htdocs/luci-static/resources/menu-edge.js +++ /dev/null @@ -1,158 +0,0 @@ -'use strict'; -'require baseclass'; -'require ui'; - -return baseclass.extend({ - __init__: function () { - ui.menu.load().then(L.bind(this.render, this)); - }, - - render: function (tree) { - var node = tree, - url = '', - children = ui.menu.getChildren(tree); - - for (var i = 0; i < children.length; i++) { - var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[0] : i == 0); - - if (isActive) - this.renderMainMenu(children[i], children[i].name); - } - - if (L.env.dispatchpath.length >= 3) { - for (var i = 0; i < 3 && node; i++) { - node = node.children[L.env.dispatchpath[i]]; - url = url + (url ? '/' : '') + L.env.dispatchpath[i]; - } - - if (node) - this.renderTabMenu(node, url); - } - - document.querySelector('a.showSide') - .addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); - document.querySelector('.darkMask') - .addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); - }, - - handleMenuExpand: function (ev) { - var a = ev.target, slide = a.parentNode, slide_menu = a.nextElementSibling; - var collapse = false; - - document.querySelectorAll('.main .main-left .nav > li >ul.active').forEach(function (ul) { - $(ul).stop(true).slideUp("fast", function () { - ul.classList.remove('active'); - ul.previousElementSibling.classList.remove('active'); - }); - if (!collapse && ul === slide_menu) { - collapse = true; - } - - }); - - if (!slide_menu) - return; - - - if (!collapse) { - $(slide).find(".slide-menu").slideDown("fast",function(){ - slide_menu.classList.add('active'); - a.classList.add('active'); - }); - a.blur(); - } - ev.preventDefault(); - ev.stopPropagation(); - }, - - renderMainMenu: function (tree, url, level) { - var l = (level || 0) + 1, - ul = E('ul', { 'class': level ? 'slide-menu' : 'nav' }), - children = ui.menu.getChildren(tree); - - if (children.length == 0 || l > 2) - return E([]); - - for (var i = 0; i < children.length; i++) { - var isActive = ((L.env.dispatchpath[l] == children[i].name) && (L.env.dispatchpath[l - 1] == tree.name)), - submenu = this.renderMainMenu(children[i], url + '/' + children[i].name, l), - hasChildren = submenu.children.length, - slideClass = hasChildren ? 'slide' : null, - menuClass = hasChildren ? 'menu' : 'food'; - if (isActive) { - ul.classList.add('active'); - slideClass += " active"; - menuClass += " active"; - } - - ul.appendChild(E('li', { 'class': slideClass }, [ - E('a', { - 'href': L.url(url, children[i].name), - 'click': (l == 1) ? ui.createHandlerFn(this, 'handleMenuExpand') : null, - 'class': menuClass, - 'data-title': hasChildren ? children[i].title.replace(" ", "_") : children[i].title.replace(" ", "_"), - }, [_(children[i].title)]), - submenu - ])); - } - - if (l == 1) { - document.querySelector('#mainmenu').appendChild(ul); - document.querySelector('#mainmenu').style.display = ''; - - } - return ul; - }, - - renderTabMenu: function (tree, url, level) { - var container = document.querySelector('#tabmenu'), - l = (level || 0) + 1, - ul = E('ul', { 'class': 'tabs' }), - children = ui.menu.getChildren(tree), - activeNode = null; - - if (children.length == 0) - return E([]); - - for (var i = 0; i < children.length; i++) { - var isActive = (L.env.dispatchpath[l + 2] == children[i].name), - activeClass = isActive ? ' active' : '', - className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass); - - ul.appendChild(E('li', { 'class': className }, [ - E('a', { 'href': L.url(url, children[i].name) }, [_(children[i].title)]) - ])); - - if (isActive) - activeNode = children[i]; - } - - container.appendChild(ul); - container.style.display = ''; - - if (activeNode) - container.appendChild(this.renderTabMenu(activeNode, url + '/' + activeNode.name, l)); - - return ul; - }, - - handleSidebarToggle: function (ev) { - var showside = document.querySelector('a.showSide'), - sidebar = document.querySelector('#mainmenu'), - darkmask = document.querySelector('.darkMask'), - scrollbar = document.querySelector('.main-right'); - - if (showside.classList.contains('active')) { - showside.classList.remove('active'); - sidebar.classList.remove('active'); - scrollbar.classList.remove('active'); - darkmask.classList.remove('active'); - } - else { - showside.classList.add('active'); - sidebar.classList.add('active'); - scrollbar.classList.add('active'); - darkmask.classList.add('active'); - } - } -}); diff --git a/luci-theme-edge/luasrc/view/header_login.htm b/luci-theme-edge/luasrc/view/header_login.htm deleted file mode 100644 index c550b2136..000000000 --- a/luci-theme-edge/luasrc/view/header_login.htm +++ /dev/null @@ -1,38 +0,0 @@ -<%# - Copyright 2008 Steven Barth - Copyright 2008-2019 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% - if not luci.dispatcher.context.template_header_sent then - include("themes/" .. theme .. "/header_login") - luci.dispatcher.context.template_header_sent = true - end - - local applyconf = luci.config and luci.config.apply -%> - - - - diff --git a/luci-theme-edge/luasrc/view/themes/edge/footer.htm b/luci-theme-edge/luasrc/view/themes/edge/footer.htm deleted file mode 100644 index f4751b177..000000000 --- a/luci-theme-edge/luasrc/view/themes/edge/footer.htm +++ /dev/null @@ -1,36 +0,0 @@ -<%# - edge is a clean HTML5 theme for LuCI. It is based on luci-theme-material edge Template - - luci-theme-edge - Copyright 2019 Jerrykuku - - Have a bug? Please create an issue here on GitHub! - https://github.com/jerrykuku/luci-theme-edge/issues - - luci-theme-material: - Copyright 2015 Lutty Yang - - Agron Theme - https://demos.creative-tim.com/edge-dashboard/index.html - - Licensed to the public under the Apache License 2.0 --%> - -<% local ver = require "luci.version" %> - - - - - - - - - - - diff --git a/luci-theme-edge/luasrc/view/themes/edge/header.htm b/luci-theme-edge/luasrc/view/themes/edge/header.htm deleted file mode 100644 index ab116482a..000000000 --- a/luci-theme-edge/luasrc/view/themes/edge/header.htm +++ /dev/null @@ -1,139 +0,0 @@ -<%# - edge is a clean HTML5 theme for LuCI. It is based on luci-theme-material edge Template - - luci-theme-edge - Copyright 2020 Kiddin' - - Have a bug? Please create an issue here on GitHub! - https://github.com/jerrykuku/luci-theme-edge/issues - - luci-theme-material: - Copyright 2015 Lutty Yang - - Agron Theme - https://demos.creative-tim.com/edge-dashboard/index.html - - Licensed to the public under the Apache License 2.0 --%> - -<% - local sys = require "luci.sys" - local util = require "luci.util" - local http = require "luci.http" - local disp = require "luci.dispatcher" - - local boardinfo = util.ubus("system", "board") - - local node = disp.context.dispatched - - local fs = require "nixio.fs" - local nutil = require "nixio.util" - - - - -- send as HTML5 - http.prepare_content("text/html") - - math.randomseed(os.time()) - --%> - - - - - - - <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - - LuCI - - - - - - - - LuCI"> - - LuCI"> - - - - - - <% if node and node.css then %> - - <% end -%> - <% if css then %> - - <% end -%> - - - - - - -"> - -
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- - - -
-
-
- -
-
-
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -
-

<%:No password set!%>

-

<%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> -

- <% if disp.lookup("admin/system/admin") then %> - - <% end %> -
- <%- end -%> - - - - diff --git a/luci-theme-edge/luasrc/view/themes/edge/header_login.htm b/luci-theme-edge/luasrc/view/themes/edge/header_login.htm deleted file mode 100644 index 20be4367f..000000000 --- a/luci-theme-edge/luasrc/view/themes/edge/header_login.htm +++ /dev/null @@ -1,120 +0,0 @@ -<%# - Edge is a clean HTML5 theme for LuCI. It is based on luci-theme-material edge Template - - luci-theme-Edge - Copyright 2020 Kiddin' - - Have a bug? Please create an issue here on GitHub! - https://github.com/kiddin9/luci-theme-edge/issues - - luci-theme-Argon: - Copyright 2019 Jerrykuku - - Edge Theme - https://demos.creative-tim.com/edge-dashboard/index.html - - Licensed to the public under the Apache License 2.0 --%> - -<% - local sys = require "luci.sys" - local util = require "luci.util" - local http = require "luci.http" - local disp = require "luci.dispatcher" - - local boardinfo = util.ubus("system", "board") - - local node = disp.context.dispatched - - local fs = require "nixio.fs" - local nutil = require "nixio.util" - - - - -- send as HTML5 - http.prepare_content("text/html") - - math.randomseed(os.time()) - - --%> - - - - - - - <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - - LuCI - - - - - - - - LuCI"> - - LuCI"> - - - - - - - <% if node and node.css then %> - - <% end -%> - <% if css then %> - - <% end -%> - - - - - - - -"> - -

您使用的浏览器过于老旧, -请使用 Edge , Firefox 等高级浏览器.

diff --git a/luci-theme-edge/luasrc/view/themes/edge/sysauth.htm b/luci-theme-edge/luasrc/view/themes/edge/sysauth.htm deleted file mode 100644 index 221f1598d..000000000 --- a/luci-theme-edge/luasrc/view/themes/edge/sysauth.htm +++ /dev/null @@ -1,115 +0,0 @@ -<%# - Copyright 2008 Steven Barth - Copyright 2008-2012 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<%+header_login%> - -
imgimgimg -
- -
- - - - -
-
-
-
-
-
-
-
-
- -
-
-
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -
-

<%:No password set!%>

-

<%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> -

-
- <%- end -%> - <%- if fuser then %> -
-

<%:Invalid username and/or password! Please try again.%>

-
- <% end -%> - -
- - - -
- - -
-

-
- <%:Have a nice day. ✨%> -
-
-
- -
- -
-
-
- -
- -
-
-
-
- -
- - -
-
- - - - - -<%+footer%> -<% -io.popen("(curl -k -L \"$(curl -s https://instant.unsplash.com | grep -oE '\"raw\":\".*?\",\"full\"'| grep -o 'https://.*,' | sed 's/\",//g')q=80\&w=1680\" -o /www/luci-static/edge/background/1.jpg >/dev/null 2>&1) &") -io.popen("(curl -k -L \"$(curl -s https://instant.unsplash.com | grep -oE '\"raw\":\".*?\",\"full\"'| grep -o 'https://.*,' | sed 's/\",//g')q=80\&w=1680\" -o /www/luci-static/edge/background/2.jpg >/dev/null 2>&1) &") -io.popen("(curl -k -L \"$(curl -s https://instant.unsplash.com | grep -oE '\"raw\":\".*?\",\"full\"'| grep -o 'https://.*,' | sed 's/\",//g')q=80\&w=1680\" -o /www/luci-static/edge/background/3.jpg >/dev/null 2>&1) &") -%> diff --git a/luci-theme-edge/root/etc/uci-defaults/30_luci-theme-edge b/luci-theme-edge/root/etc/uci-defaults/30_luci-theme-edge deleted file mode 100644 index 27a2558fd..000000000 --- a/luci-theme-edge/root/etc/uci-defaults/30_luci-theme-edge +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -uci batch <<-EOF - set luci.themes.Edge=/luci-static/edge - set luci.main.mediaurlbase=/luci-static/edge - commit luci -EOF -exit 0