Compass-ci
Threads by month
- ----- 2025 -----
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- 5230 discussions

[PATCH compass-ci 04/40] container/srv-http: turn off statistic folder size function
by Wu Zhende 15 Dec '20
by Wu Zhende 15 Dec '20
15 Dec '20
From: Lu Weitao <luweitaobe(a)163.com>
[Why]
When the folder is larger, the web page response is slower
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/root/srv/_h5ai/private/conf/options.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/options.json b/container/srv-http/root/srv/_h5ai/private/conf/options.json
index 69a7add..5d922da 100755
--- a/container/srv-http/root/srv/_h5ai/private/conf/options.json
+++ b/container/srv-http/root/srv/_h5ai/private/conf/options.json
@@ -158,7 +158,7 @@
- type: string, "php" (sloooow) or "shell-du" (sloow)
*/
"foldersize": {
- "enabled": true,
+ "enabled": false,
"type": "php"
},
--
2.23.0
1
0

15 Dec '20
From: Lu Weitao <luweitaobe(a)163.com>
[Why]
Haven't define images relationship in mime.types
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/root/etc/nginx/mime.types | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/container/srv-http/root/etc/nginx/mime.types b/container/srv-http/root/etc/nginx/mime.types
index a4ee74b..a8f7b0c 100644
--- a/container/srv-http/root/etc/nginx/mime.types
+++ b/container/srv-http/root/etc/nginx/mime.types
@@ -6,6 +6,17 @@ types {
text/yaml yaml;
text/plain txt time data sh log;
+ image/gif gif;
+ image/jpeg jpeg jpg;
+ image/png png;
+ image/svg+xml svg svgz;
+ image/tiff tif tiff;
+ image/vnd.wap.wbmp wbmp;
+ image/webp webp;
+ image/x-icon ico;
+ image/x-jng jng;
+ image/x-ms-bmp bmp;
+
application/json json;
application/x-gzip gz tgz cgz;
}
--
2.23.0
1
0
From: Lu Weitao <luweitaobe(a)163.com>
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/Dockerfile | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/container/srv-http/Dockerfile b/container/srv-http/Dockerfile
index 2821e57..8f9a36d 100644
--- a/container/srv-http/Dockerfile
+++ b/container/srv-http/Dockerfile
@@ -7,5 +7,9 @@ ADD root /
RUN apk add --no-cache php7 php7-fpm php7-session php7-json php7-exif php7-imagick php7-gd php7-fileinfo
RUN sed -i '/\[global\]/a daemonize = no' /etc/php7/php-fpm.conf
+RUN sed -i "s/user = nobody/user = nginx/g" /etc/php7/php-fpm.d/www.conf
+RUN sed -i "s/group = nobody/group = nginx/g" /etc/php7/php-fpm.d/www.conf
+
+RUN chown -R nginx:nginx /srv/_h5ai
ENTRYPOINT ["/sbin/entrypoint.sh"]
--
2.23.0
1
0
From: Lu Weitao <luweitaobe(a)163.com>
[Why]
Optimize result page style to make it more modern
[Example]
http://124.90.34.227:11300/result/iperf/2020-12-08/vm-2p8g/openeuler-20.03-…
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
.../root/etc/nginx/conf.d/default.conf | 5 +-
container/srv-http/root/srv/.htaccess | 165 +++++
container/srv-http/root/srv/_h5ai/.htaccess | 165 +++++
.../srv-http/root/srv/_h5ai/CHANGELOG.md | 598 ++++++++++++++++++
container/srv-http/root/srv/_h5ai/README.md | 72 +++
.../root/srv/_h5ai/private/cache/README.md | 9 +
.../root/srv/_h5ai/private/conf/l10n/af.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/bg.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/cs.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/da.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/de.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/el.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/en.json | 23 +
.../root/srv/_h5ai/private/conf/l10n/es.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/et.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/fi.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/fr.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/he.json | 17 +
.../root/srv/_h5ai/private/conf/l10n/hi.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/hr.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/hu.json | 16 +
.../root/srv/_h5ai/private/conf/l10n/it.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/ja.json | 20 +
.../root/srv/_h5ai/private/conf/l10n/ko.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/lv.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/nb.json | 15 +
.../root/srv/_h5ai/private/conf/l10n/nl.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/pl.json | 22 +
.../root/srv/_h5ai/private/conf/l10n/pt.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/ro.json | 15 +
.../root/srv/_h5ai/private/conf/l10n/ru.json | 20 +
.../root/srv/_h5ai/private/conf/l10n/sk.json | 13 +
.../root/srv/_h5ai/private/conf/l10n/sl.json | 18 +
.../root/srv/_h5ai/private/conf/l10n/sr.json | 15 +
.../root/srv/_h5ai/private/conf/l10n/sv.json | 16 +
.../root/srv/_h5ai/private/conf/l10n/tr.json | 14 +
.../root/srv/_h5ai/private/conf/l10n/uk.json | 18 +
.../srv/_h5ai/private/conf/l10n/zh-cn.json | 23 +
.../srv/_h5ai/private/conf/l10n/zh-tw.json | 23 +
.../root/srv/_h5ai/private/conf/options.json | 392 ++++++++++++
.../root/srv/_h5ai/private/conf/types.json | 76 +++
.../srv/_h5ai/private/php/class-bootstrap.php | 45 ++
.../srv/_h5ai/private/php/core/class-api.php | 109 ++++
.../_h5ai/private/php/core/class-context.php | 294 +++++++++
.../_h5ai/private/php/core/class-fallback.php | 54 ++
.../_h5ai/private/php/core/class-filesize.php | 96 +++
.../srv/_h5ai/private/php/core/class-item.php | 91 +++
.../srv/_h5ai/private/php/core/class-json.php | 65 ++
.../_h5ai/private/php/core/class-logger.php | 28 +
.../_h5ai/private/php/core/class-request.php | 38 ++
.../_h5ai/private/php/core/class-session.php | 20 +
.../_h5ai/private/php/core/class-setup.php | 185 ++++++
.../_h5ai/private/php/core/class-theme.php | 32 +
.../srv/_h5ai/private/php/core/class-util.php | 89 +++
.../_h5ai/private/php/ext/class-archive.php | 183 ++++++
.../_h5ai/private/php/ext/class-custom.php | 65 ++
.../_h5ai/private/php/ext/class-search.php | 40 ++
.../srv/_h5ai/private/php/ext/class-thumb.php | 253 ++++++++
.../srv/_h5ai/private/php/pages/index.php | 2 +
.../root/srv/_h5ai/private/php/pages/info.php | 2 +
.../srv-http/root/srv/_h5ai/public/.htaccess | 13 +
.../root/srv/_h5ai/public/cache/README.md | 9 +
.../root/srv/_h5ai/public/css/styles.css | 2 +
.../root/srv/_h5ai/public/ext/README.md | 4 +
.../srv/_h5ai/public/images/fallback/file.png | Bin 0 -> 118 bytes
.../public/images/fallback/folder-parent.png | Bin 0 -> 108 bytes
.../_h5ai/public/images/fallback/folder.png | Bin 0 -> 99 bytes
.../public/images/favicon/favicon-152.png | Bin 0 -> 219 bytes
.../public/images/favicon/favicon-16-32.ico | Bin 0 -> 5430 bytes
.../public/images/favicon/favicon-16.png | Bin 0 -> 96 bytes
.../public/images/favicon/favicon-32.png | Bin 0 -> 120 bytes
.../_h5ai/public/images/favicon/favicon.svg | 3 +
.../srv/_h5ai/public/images/themes/README.md | 9 +
.../public/images/themes/comity/ar-apk.svg | 3 +
.../public/images/themes/comity/ar-deb.svg | 16 +
.../public/images/themes/comity/ar-rpm.svg | 11 +
.../public/images/themes/comity/txt-css.svg | 13 +
.../public/images/themes/comity/txt-go.svg | 29 +
.../public/images/themes/comity/txt-html.svg | 10 +
.../public/images/themes/comity/txt-js.svg | 3 +
.../public/images/themes/comity/txt-less.svg | 8 +
.../public/images/themes/comity/txt-md.svg | 3 +
.../public/images/themes/comity/txt-php.svg | 3 +
.../public/images/themes/comity/txt-py.svg | 8 +
.../public/images/themes/comity/txt-rb.svg | 3 +
.../public/images/themes/comity/txt-rust.svg | 3 +
.../images/themes/comity/txt-script.svg | 3 +
.../public/images/themes/comity/x-pdf.svg | 3 +
.../_h5ai/public/images/themes/default/ar.svg | 3 +
.../public/images/themes/default/aud.svg | 3 +
.../public/images/themes/default/bin.svg | 3 +
.../public/images/themes/default/file.svg | 3 +
.../images/themes/default/folder-page.svg | 3 +
.../images/themes/default/folder-parent.svg | 3 +
.../public/images/themes/default/folder.svg | 3 +
.../public/images/themes/default/img.svg | 3 +
.../public/images/themes/default/txt.svg | 3 +
.../public/images/themes/default/vid.svg | 3 +
.../_h5ai/public/images/themes/default/x.svg | 3 +
.../root/srv/_h5ai/public/images/ui/back.svg | 3 +
.../root/srv/_h5ai/public/images/ui/crumb.svg | 3 +
.../srv/_h5ai/public/images/ui/download.svg | 3 +
.../srv/_h5ai/public/images/ui/filter.svg | 5 +
.../_h5ai/public/images/ui/info-toggle.svg | 3 +
.../srv/_h5ai/public/images/ui/paypal.svg | 6 +
.../_h5ai/public/images/ui/preview-close.svg | 3 +
.../public/images/ui/preview-fullscreen.svg | 3 +
.../_h5ai/public/images/ui/preview-next.svg | 3 +
.../images/ui/preview-no-fullscreen.svg | 3 +
.../_h5ai/public/images/ui/preview-prev.svg | 3 +
.../_h5ai/public/images/ui/preview-raw.svg | 3 +
.../srv/_h5ai/public/images/ui/search.svg | 5 +
.../srv/_h5ai/public/images/ui/selected.svg | 3 +
.../srv/_h5ai/public/images/ui/sidebar.svg | 3 +
.../root/srv/_h5ai/public/images/ui/sort.svg | 3 +
.../srv/_h5ai/public/images/ui/spinner.svg | 6 +
.../_h5ai/public/images/ui/tree-indicator.svg | 3 +
.../_h5ai/public/images/ui/tree-toggle.svg | 3 +
.../_h5ai/public/images/ui/view-details.svg | 3 +
.../srv/_h5ai/public/images/ui/view-grid.svg | 3 +
.../srv/_h5ai/public/images/ui/view-icons.svg | 3 +
.../srv-http/root/srv/_h5ai/public/index.php | 17 +
.../root/srv/_h5ai/public/js/scripts.js | 5 +
123 files changed, 4082 insertions(+), 3 deletions(-)
create mode 100644 container/srv-http/root/srv/.htaccess
create mode 100644 container/srv-http/root/srv/_h5ai/.htaccess
create mode 100644 container/srv-http/root/srv/_h5ai/CHANGELOG.md
create mode 100644 container/srv-http/root/srv/_h5ai/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/private/cache/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/options.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/types.json
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-api.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-context.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-item.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-json.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-request.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-session.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-util.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/pages/index.php
create mode 100755 container/srv-http/root/srv/_h5ai/private/php/pages/info.php
create mode 100755 container/srv-http/root/srv/_h5ai/public/.htaccess
create mode 100755 container/srv-http/root/srv/_h5ai/public/cache/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/public/css/styles.css
create mode 100755 container/srv-http/root/srv/_h5ai/public/ext/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/file.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/README.md
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/back.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/download.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/search.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg
create mode 100755 container/srv-http/root/srv/_h5ai/public/index.php
create mode 100755 container/srv-http/root/srv/_h5ai/public/js/scripts.js
diff --git a/container/srv-http/root/etc/nginx/conf.d/default.conf b/container/srv-http/root/etc/nginx/conf.d/default.conf
index 676418a..646eee3 100644
--- a/container/srv-http/root/etc/nginx/conf.d/default.conf
+++ b/container/srv-http/root/etc/nginx/conf.d/default.conf
@@ -3,8 +3,8 @@ server {
server_name "srv-http";
server_tokens off;
- root /usr/share/nginx/html;
- index index.html;
+ root /srv;
+ index index.html index.php /_h5ai/public/index.php;
charset utf-8,gbk;
@@ -24,7 +24,6 @@ server {
autoindex on;
autoindex_localtime on;
allow all;
- root /srv;
location ~* /[-_a-z]+$ {
add_header Content-Type text/plain;
}
diff --git a/container/srv-http/root/srv/.htaccess b/container/srv-http/root/srv/.htaccess
new file mode 100644
index 0000000..95e775b
--- /dev/null
+++ b/container/srv-http/root/srv/.htaccess
@@ -0,0 +1,165 @@
+## details here: https://github.com/h5bp/server-configs-apache
+
+
+
+## SECURITY ###################################################################
+
+DirectoryIndex disabled
+FileETag None
+ServerSignature Off
+
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</IfModule>
+
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+ Require all denied
+</IfModule>
+
+<IfModule mod_headers.c>
+ Header set X-Content-Type-Options "nosniff"
+ Header unset ETag
+ Header unset X-Powered-By
+</IfModule>
+
+<IfModule mod_autoindex.c>
+ Options -Indexes
+</IfModule>
+
+
+
+## COMPAT #####################################################################
+
+AddDefaultCharset utf-8
+
+<IfModule mod_mime.c>
+ AddCharset utf-8 .css .html .js .json .php .svg
+
+ AddType application/font-woff woff
+ AddType application/font-woff2 woff2
+ AddType application/json json
+ AddType application/javascript js
+ AddType application/vnd.ms-fontobject eot
+ AddType application/x-font-ttf ttc ttf
+ AddType image/jpeg jpeg jpg
+ AddType image/png png
+ AddType image/svg+xml svg svgz
+ AddType image/x-icon ico
+ AddType font/opentype otf
+ AddType text/css css
+ AddType text/html html
+</IfModule>
+
+
+
+## SPEED ######################################################################
+
+<IfModule mod_expires.c>
+ ExpiresActive on
+ ExpiresDefault "access plus 1 month"
+
+ ExpiresByType application/json "access plus 0 seconds"
+
+ ExpiresByType text/html "access plus 1 minute"
+
+ ExpiresByType image/x-icon "access plus 1 week"
+
+ ExpiresByType application/javascript "access plus 1 year"
+ ExpiresByType image/jpeg "access plus 1 year"
+ ExpiresByType image/png "access plus 1 year"
+ ExpiresByType image/svg+xml "access plus 1 year"
+ ExpiresByType text/css "access plus 1 year"
+</IfModule>
+
+<IfModule mod_deflate.c>
+ <IfModule mod_setenvif.c>
+ <IfModule mod_headers.c>
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+ RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+ </IfModule>
+ </IfModule>
+
+ # Apache ≥ 2.3
+ <IfModule mod_authz_core.c>
+ # mod_filter as module only available for Apache ≥ 2.3.7
+ <IfModule mod_filter.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+ </IfModule>
+
+ # Apache < 2.3
+ <IfModule !mod_authz_core.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+
+ <IfModule mod_mime.c>
+ AddEncoding gzip gz
+ AddEncoding gzip svgz
+ </IfModule>
+</IfModule>
diff --git a/container/srv-http/root/srv/_h5ai/.htaccess b/container/srv-http/root/srv/_h5ai/.htaccess
new file mode 100644
index 0000000..95e775b
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/.htaccess
@@ -0,0 +1,165 @@
+## details here: https://github.com/h5bp/server-configs-apache
+
+
+
+## SECURITY ###################################################################
+
+DirectoryIndex disabled
+FileETag None
+ServerSignature Off
+
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</IfModule>
+
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+ Require all denied
+</IfModule>
+
+<IfModule mod_headers.c>
+ Header set X-Content-Type-Options "nosniff"
+ Header unset ETag
+ Header unset X-Powered-By
+</IfModule>
+
+<IfModule mod_autoindex.c>
+ Options -Indexes
+</IfModule>
+
+
+
+## COMPAT #####################################################################
+
+AddDefaultCharset utf-8
+
+<IfModule mod_mime.c>
+ AddCharset utf-8 .css .html .js .json .php .svg
+
+ AddType application/font-woff woff
+ AddType application/font-woff2 woff2
+ AddType application/json json
+ AddType application/javascript js
+ AddType application/vnd.ms-fontobject eot
+ AddType application/x-font-ttf ttc ttf
+ AddType image/jpeg jpeg jpg
+ AddType image/png png
+ AddType image/svg+xml svg svgz
+ AddType image/x-icon ico
+ AddType font/opentype otf
+ AddType text/css css
+ AddType text/html html
+</IfModule>
+
+
+
+## SPEED ######################################################################
+
+<IfModule mod_expires.c>
+ ExpiresActive on
+ ExpiresDefault "access plus 1 month"
+
+ ExpiresByType application/json "access plus 0 seconds"
+
+ ExpiresByType text/html "access plus 1 minute"
+
+ ExpiresByType image/x-icon "access plus 1 week"
+
+ ExpiresByType application/javascript "access plus 1 year"
+ ExpiresByType image/jpeg "access plus 1 year"
+ ExpiresByType image/png "access plus 1 year"
+ ExpiresByType image/svg+xml "access plus 1 year"
+ ExpiresByType text/css "access plus 1 year"
+</IfModule>
+
+<IfModule mod_deflate.c>
+ <IfModule mod_setenvif.c>
+ <IfModule mod_headers.c>
+ SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+ RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+ </IfModule>
+ </IfModule>
+
+ # Apache ≥ 2.3
+ <IfModule mod_authz_core.c>
+ # mod_filter as module only available for Apache ≥ 2.3.7
+ <IfModule mod_filter.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+ </IfModule>
+
+ # Apache < 2.3
+ <IfModule !mod_authz_core.c>
+ AddOutputFilterByType DEFLATE "application/atom+xml" \
+ "application/javascript" \
+ "application/json" \
+ "application/ld+json" \
+ "application/manifest+json" \
+ "application/rdf+xml" \
+ "application/rss+xml" \
+ "application/schema+json" \
+ "application/vnd.geo+json" \
+ "application/vnd.ms-fontobject" \
+ "application/x-font-ttf" \
+ "application/x-javascript" \
+ "application/x-web-app-manifest+json" \
+ "application/xhtml+xml" \
+ "application/xml" \
+ "font/eot" \
+ "font/opentype" \
+ "image/bmp" \
+ "image/svg+xml" \
+ "image/vnd.microsoft.icon" \
+ "image/x-icon" \
+ "text/cache-manifest" \
+ "text/css" \
+ "text/html" \
+ "text/javascript" \
+ "text/plain" \
+ "text/vcard" \
+ "text/vnd.rim.location.xloc" \
+ "text/vtt" \
+ "text/x-component" \
+ "text/x-cross-domain-policy" \
+ "text/xml"
+ </IfModule>
+
+ <IfModule mod_mime.c>
+ AddEncoding gzip gz
+ AddEncoding gzip svgz
+ </IfModule>
+</IfModule>
diff --git a/container/srv-http/root/srv/_h5ai/CHANGELOG.md b/container/srv-http/root/srv/_h5ai/CHANGELOG.md
new file mode 100644
index 0000000..b575191
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/CHANGELOG.md
@@ -0,0 +1,598 @@
+# Changelog
+
+
+## v0.29.2 - *2019-03-22*
+
+* update `babel-loader` to 7.1.1
+* update `eslint` to 5.15.3
+* update `ghu` to 0.13.0
+* update `jsdom` to 14.0.0
+* update `kjua` to 0.2.0
+* update `lolight` to 1.0.0
+* update `scar` to 1.2.0
+
+
+## v0.29.1 - *2019-01-20*
+
+* replace `babel-preset-es2015` with `babel-preset-env`
+* update `eslint` to 5.14.1
+* update `ghu` to 0.12.0
+* update `jsdom` to 9.2.0
+* update `kjua` to 0.1.2
+* update `lolight` to 0.6.0
+* update `marked` to 0.6.1
+* update `normalize.css` to 8.0.1
+* update `scar` to 1.0.0
+
+
+## v0.29.0 - *2016-08-12*
+
+* back to cleaner visual experience
+* add option to disable sidebar
+* add options to filter/search ignore case
+* replace PHP `getenv` calls with `$_SERVER` lookups
+* add `view.fallbackMode` option to generally serve only fallback mode
+* serve fallback mode for text browsers (`curl`, `links`, `lynx`, `w3m`)
+* change type `txt-svg` to `img-svg`, no thumbs but preview
+* fix a tree indentation glitch
+* fix shell command detection on Windows
+* fix Piwik anayltics
+* fix `.htaccess` auth issues
+* fix drag-select on scrollable content
+* fix download-all function
+* fix audio and video preview loading
+* fix thumbnail request issues
+* add `rust` type and icon
+* add `autoplay` option to audio and video preview
+* add `--dereference` to `shell-du` to follow sym links
+* remove *Install* section from `README.md`, causes too much trouble
+* remove peer5 support
+* update build process to use `node 6.0+`, no need for babel now
+* replace `jquery-qrcode` with [`kjua`](https://larsjung.de/kjua/)
+* replace `prism` with [`lolight`](https://larsjung.de/lolight/)
+* move deps to `package.json` (`normalize.css`, `kjua`, `lolight` and `marked`)
+* remove `jQuery`
+* remove `lodash`
+* remove [`modulejs`](https://larsjung.de/modulejs/) for now
+* reduce JS code by 60% (~250kb -> ~100kb)
+* update languages (`et`, `nl`, `pl`)
+
+
+## v0.28.0 - *2015-12-19*
+
+* now require PHP 5.5.0+
+* change index path to `/_h5ai/public/index.php`
+* now only `/_h5ai/public/` needs to be web-accessible
+* add support for custom script and style additions
+* add options to set font families
+* add search
+* add ignorecase sorting option to tree
+* add wide links in tree view
+* add IE edge mode
+* add frontend tests
+* fix some styles in IE10
+* fix preview bottom bar for small screen widths
+* lots of code cleanup and refactorings
+* change API
+* update build process, now uses [`ghu`](https://larsjung.de/ghu/)
+* switch from jshint and jscs to [`eslint`](http://eslint.org/)
+* update `jQuery` to 2.1.4
+* update `lodash` to 3.9.3 (add debounce and trim)
+* update `marked` to 0.3.5
+* update `modulejs` to 1.13.0
+* update `prism` to 2015-12-19
+* update h5bp styles to 5.2.0
+* update `normalize.css` to 3.0.3
+* remove `Moment.js`
+
+
+## v0.27.0 - *2015-04-06*
+
+* new layout
+* add editorconfig
+* drop support for IE9 (gets fallback)
+* update sidebar settings
+* add info sidebar
+* add opt-out for click'n'drag selection
+* add package name option for single selections
+* add initial support for Peer5
+* add option to down-sample images for preview
+* add option for natural sorting in tree sidebar
+* fix problems with files/folders named `0`
+* change font from `Ubuntu` to `Roboto` (smaller footprint, clearer for small sizes)
+* switch back to Google Fonts
+* improve PDF thumbnail quality
+* improve drag-select
+* improve image preview
+* prevent listing `_h5ai` folder and subfolders
+* update build process, now uses [`mkr`](https://larsjung.de/mkr/) and [`fQuery`](https://larsjung.de/fquery/)
+* update `jQuery` to 2.1.3
+* update `jQuery.qrcode` to 0.11.0
+* update `Lo-Dash` to 3.6.0
+* update `Modernizr` to 2.8.3
+* update `modulejs` to 1.4.0
+* update `Moment.js` to 2.9.0
+* update `Prism` to 2015-04-05
+* remove deprecated Google Analytics code
+* remove `jQuery.fracs`
+* remove `jQuery.scrollpanel`
+* remove `jQuery.mousewheel`
+* update languages (`af`, `es`, `ja`, `ko`, `ru`, `zh-cn`)
+
+
+## v0.26.1 - *2014-08-17*
+
+* fix links
+
+
+## v0.26.0 - *2014-08-16*
+
+* remove True Type fonts
+* outsource themes to [h5ai-themes](https://github.com/lrsjng/h5ai-themes)
+* add filesize fallback for large files and 32bit PHP
+* fix server detection
+* add config file tests to info page
+* remove JSON shim
+* add caching of command checks
+* update `jQuery.mousewheel` to 3.1.12
+* update `jQuery.qrcode` to 0.8.0
+* replace `markdown` with [`marked`](https://github.com/chjj/marked) 0.3.2
+* update `modulejs` to 0.4.5
+* update `Moment.js` to 2.8.1
+* replace `underscore` with [`Lo-Dash`](https://github.com/lodash/lodash) 2.4.1
+* replace `SyntaxHighlighter` with [`Prism`](http://prismjs.com) 2014-08-04
+
+
+## v0.25.2 - *2014-07-01*
+
+* add optional info page protection
+* fix `short_open_tag` issues for PHP < 5.4.0
+* fix default folder download (`alwaysVisible` option)
+* minor fixes
+
+
+## v0.25.1 - *2014-06-25*
+
+* fix broken paths for filenames containing '+' characters
+* fix Google Universal Analytics
+* fix file type check
+
+
+## v0.25.0 - *2014-06-22*
+
+* add sidebar
+* add initial theme support
+* add icons from [Evolvere Icon Theme](http://franksouza183.deviantart.com/art/Evolvere-Icon-theme-44071829…
+* add PHP variant to calc folder sizes
+* add scroll position reset on location change (issue [#279](https://github.com/lrsjng/h5ai/issues/279))
+* add option to hide unreadable files
+* add option where to place folders (top, inplace, bottom)
+* add markdown support for custom header and footer files
+* add video and audio preview via HTML5 elements (no fallback, works best in Chrome)
+* add filter reset on location change
+* add option to make download button always visible
+* add Google UA support
+* extend selectable icon sizes (add 128px, 192px, 256px, 384px)
+* improve preview GUI
+* disable thumbs in `cache` folder
+* fix QR code URI origin (issue [#287](https://github.com/lrsjng/h5ai/issues/287))
+* replace PHP backtick operator with `exec`
+* remove server side file manipulation extensions `dropbox`, `delete` and `rename`
+* update `H5BP` to 4.3.0
+* update `jQuery` to 2.1.1
+* update `json2.js` to 2014-02-04
+* update `markdown-js` to 0.5.0
+* update `Modernizr` to 2.8.2
+* update `Moment.js` to 2.6.0
+* update `Underscore.js` to 1.6.0
+* update languages (`bg`, `ko`, `pt`, `sl`, `sv`, `zh-cn`)
+
+
+## v0.24.1 - *2014-04-09*
+
+* security fixes! (issues [#268](https://github.com/lrsjng/h5ai/issues/268), [#269](https://github.com/lrsjng/h5ai/issues/269))
+* fix WinOS command detection
+* update languages (`fi`, `fr`, `hi`, `it`, `zh-tw`)
+
+
+## v0.24.0 - *2013-09-04*
+
+* updates image and text preview
+* adds variable icon sizes
+* adds optional natural sort of items
+* adds optional checkboxes to select items
+* adds text preview modes: none, fixed, markdown
+* optionally hide folders in main view
+* makes use of EXIF thumbnails optional
+* fixes file deletion of multiple files
+* fixes `setParentFolderLabels = false`
+* fixes shell-arg and RegExp escape issues
+* cleans code
+* updates info page `/_h5ai`
+* adds `aiff` to `audio` types
+* adds `da` translation by Ronnie Milbo
+* updates to `pl` translation by Mark
+
+
+## v0.23.0 - *2013-07-21*
+
+* removes `aai` mode!
+* drops support for IE7+8 (simple fallback, same as no javascript)
+* uses History API if available (way faster browsing)
+* faster thumbnail generation if EXIF thumbnails available
+* adds optional custom headers/footers that are propageted to all subfolders
+* optional hide parent folder links
+* some fixes on previews
+* speeds up packaged downloads
+* add line wrap and line highlighting (on hover) to text preview
+* new design (colors, images)
+* now uses scalable images for the interface
+* fixes filter (ignore parent folder, display of `no match`)
+* lots of small fixes
+* updates `H5BP` to 4.2.0
+* updates `jQuery` to 2.0.3
+* updates `jQuery.mousewheel` to 3.1.3
+* updates `Moment.js` to 2.1.0
+* updates `markdown-js` to 0.4.0-9c21acdf08
+* updates `json2.js` to 2013-05-26
+* adds `uk` translation by Viktor Matveenko
+* updates to `pl` translation by Mark
+
+
+## v0.22.1 - *2012-10-16*
+
+* bug fix concerning API requests in PHP mode
+* minor changes in responsive styles
+
+
+## v0.22 - *2012-10-14*
+
+* general changes h5ai directory layout and configuration
+* splits configuration file (`config.json`) into files `options.json`, `types.json` and `langs.json`
+* localization now in separate files
+* adds auto-refresh
+* adds drag'n'drop upload (PHP, experimental)
+* adds file deletion (PHP, experimental)
+* cleans and improves PHP code
+* PHP no longer respects htaccess restrictions (so be careful)
+* PHP ignore patterns might include paths now
+* improves separation between aai and php mode
+* improves performance in aai mode
+* adds optional binary prefixes for file sizes
+* improves filter: autofocus on keypress, clear on `ESC`
+* download packages now packaged relative to current folder
+* download package name changable
+* splits type `js` into `js` and `json`
+* prevents some errors with files > 2GB on 32bit OS
+* adds max subfolder size in tree view
+* adds ctrl-click file selection
+* adds Piwik analytics extension
+* temp download packages are now stored in the `cache`-folder and deleted as soon as possible
+* updates translations
+* adds `he` translation by [Tomer Cohen](https://github.com/tomer)
+* updates 3rd party libs
+
+
+## v0.21 - *2012-08-06*
+
+* fixes misaligned image previews
+* adds no JavaScript fallback to PHP version
+* fixes duplicate tree entries and empty main views
+* adds Google Analytics support (async)
+* improves filter (now ignorecase, now only checks if chars in right order)
+* adds keyboard support to image preview (space, enter, backspace, left, right, up, down, f, esc)
+* adds text file preview and highlighting with [SyntaxHighlighter](http://alexgorbatchev.com/SyntaxHighlighter/) (same keys as img preview)
+* adds Markdown preview with [markdown-js](https://github.com/evilstreak/markdown-js)
+* adds new type `markdown`
+* changes language code `gr` to `el`
+* adds localization for filter placeholder
+* adds `hu` translation by [Rodolffo](https://github.com/Rodolffo)
+* updates to [jQuery.qrcode](https://larsjung.de/qrcode/) 0.2
+* updates to [jQuery.scrollpanel](https://larsjung.de/scrollpanel/) 0.1
+* updates to [modulejs](https://larsjung.de/modulejs/) 0.2
+* updates to [Moment.js](http://momentjs.com) 1.7.0
+* updates to [Underscore.js](http://underscorejs.org) 1.3.3
+
+
+## v0.20 - *2012-05-11*
+
+* adds image preview
+* adds thumbnails for video and pdf
+* adds support for lighttpd, nginx and cherokee and maybe other webservers with PHP
+* adds folder size in PHP version via shell `du`
+* fixes some localization problems
+* updates info page at `/_h5ai/`
+* switches to JSHint
+
+
+## v0.19 - *2012-04-19*
+
+* adds lots of config options
+* changes in `config.js` and `h5ai.htaccess`
+* fixes js problems in IE 7+8
+* hides broken tree view in IE < 9, adds a message to the footer
+* removes hash changes since they break logical browser history
+* fixes thumbnail size for portrait images in icon view
+* fixes problems with file type recognition
+* adds an info page at `/_h5ai/`
+* sort order is preserved while browsing
+* removes PHP error messages on thumbnail generation
+* fixes PHP some problems with packed download
+* adds support for tarred downloads
+* changes crumb image for folders with an index file
+* adds `index.php` to use h5ai in non-Apache environments
+* switches from [Datejs](http://www.datejs.com) to [Moment.js](http://momentjs.com)
+* adds [underscore.js](http://underscorejs.org)
+* fixes mousewheel problems, updates [jQuery.mousewheel](https://github.com/brandonaaron/jquery-mousewheel) to 3.0.6
+* updates `lv` translation
+* adds `ro` translation by [Jakob Cosoroabă](https://github.com/midday)
+* adds `ja` translation by [metasta](https://github.com/metasta)
+* adds `nb` translation by [Sindre Sorhus](https://github.com/sindresorhus)
+* adds `sr` translation by [vBm](https://github.com/vBm)
+* adds `gr` translation by [xhmikosr](https://github.com/xhmikosr)
+
+
+## v0.18 - *2012-02-24*
+
+* adds optional QRCode display
+* adds optional filtering for displayed files and folders
+* updates design
+* improves zipped download
+* adds support for zipped download of htaccess restricted files
+* changes h5ai.htaccess
+* custom headers/footers are now optional and disabled by default
+* fixes problems with folder recognition in the JS version
+* fixes include problems in PHP version
+* fixes path problems on servers running on Windows in PHP version
+* fixes broken links in custom headers/footers while zipped download enabled
+* fixes problems with thumbnails for files with single or double quotes in filename
+* improves url hashes
+* updates year in `LICENSE.TXT`
+* updates es translation
+* adds `zh-tw` translation by [Yao Wei](https://github.com/medicalwei)
+* updates `zh-cn` translation
+
+
+## v0.17 - *2011-11-28*
+
+* h5ai is now located in `_h5ai` to reduce collisions
+* switches from HTML5 Boilerplate reset to normalization
+* adds some style changes for small devices
+* configuration (options, types, translations) now via `config.js`
+* icons for JS version are now configured via `config.js`
+* sort order configuration changed
+* sorting is now done without page reload
+* adds `customHeader` and `customFooter` to `config.js`
+* supports restricted folders to some extent
+* some style changes on tree and language menu
+* fixes total file/folder count in status bar
+* adds support for use with userdir (requires some manual changes)
+
+
+## v0.16 - *2011-11-02*
+
+* sorts translations in `options.js`
+* improves HTML head sections
+* refactors JavaScript and PHP a lot
+* improves/fixes file selection for zipped download
+* fixes scrollbar and header/footer link issues (didn't work when zipped download enabled)
+* adds support for ctrl-select
+* `dateFormat` in `options.js` changed, now affecting JS and PHP version
+* `dateFormat` is localizable by adding it to a translation in `options.js`
+* PHP version is now configurable via `php/config.php` (set custom doc root and other PHP related things)
+* image thumbs and zipped download is disabled by default now, but works fine if PHP is configured
+
+
+## v0.15.2 - *2011-09-18*
+
+* adds `it` translation by [Salvo Gentile](https://github.com/SalvoGentile) and [Marco Patriarca](https://github.com/Fexys)
+* switches build process from scripp to wepp
+
+
+## v0.15.1 - *2011-09-06*
+
+* fixes security issues with the zipped download feature
+* makes zipped download optional (but enabled by default)
+
+
+## v0.15 - *2011-09-04*
+
+* adds zipped download for selected files
+* cleans and refactores
+
+
+## v0.14.1 - *2011-09-01*
+
+* display meta information in bottom bar (icon view)
+* adds `zh-cn` translation by [Dongsheng Cai](https://github.com/dongsheng)
+* adds `pl` translation by Radosław Zając
+* adds `ru` translation by Богдан Илюхин
+
+
+## v0.14 - *2011-08-16*
+
+* adds image thumbnails for PHP version
+* new option `slideTree` to turn off auto slide in
+
+
+## v0.13.2 - *2011-08-12*
+
+* changes in `/h5ai/.htaccess` ... PHP configuration ...
+
+
+## v0.13.1 - *2011-08-12*
+
+* fixes initial tree display
+* adds sort order option
+* adds/fixes some translations
+* adds `lv` translation by Sandis Veinbergs
+
+
+## v0.13 - *2011-08-06*
+
+* adds PHP implementation! (should work with PHP 5.2+)
+* adds new options
+* changes layout of the bottom bar to display status information
+* adds language selector to the bottom bar
+* quotes keys in `options.js` to make it valid json
+* changes value of option `lang` from `undefined` to `null`
+* adds some new keys to `h5aiLangs`
+* adds browser caching rules for css and js
+* adds `pt` translation by [Jonnathan](https://github.com/jonnsl)
+* adds `bg` translation by George Andonov
+
+
+## v0.12.3 - *2011-07-30*
+
+* adds `tr` translation by [Batuhan Icoz](https://github.com/batuhanicoz)
+
+
+## v0.12.2 - *2011-07-30*
+
+* adds `es` translation by Jose David Calderon Serrano
+
+
+## v0.12.1 - *2011-07-29*
+
+* fixes unchecked use of console.log
+
+
+## v0.12 - *2011-07-28*
+
+* improves performance
+
+
+## v0.11 - *2011-07-27*
+
+* changes license to MIT license, see `LICENSE.txt`
+
+
+## v0.10.2 - *2011-07-26*
+
+* improves tree scrollbar
+
+
+## v0.10.1 - *2011-07-24*
+
+* fixes problems with ' in links
+
+
+## v0.10 - *2011-07-24*
+
+* fixes problems with XAMPP on Windows (see `dot.htaccess` comments for instructions)
+* fixes tree fade-in-fade-out effect for small displays ([issue #6](https://github.com/lrsjng/h5ai/issues/6))
+* adds custom scrollbar to tree ([issue #6](https://github.com/lrsjng/h5ai/issues/6))
+* fixes broken links caused by URI encoding/decoding ([issue #9](https://github.com/lrsjng/h5ai/issues/9))
+* adds "empty" to localization (hope Google Translate did a good job here)
+
+
+## v0.9 - *2011-07-18*
+
+* links hover states between crumb, extended view and tree
+* fixes size of tree view (now there's a ugly scrollbar, hopefully will be fixed)
+* refactores js to improve performance and cleaned code
+* adds caching for folder status codes and content
+* adds `fr` translation by [Nicolas](https://github.com/Nicosmos)
+* adds `nl` translation by [Stefan de Konink](https://github.com/skinkie)
+* adds `sv` translation by Oscar Carlsson
+
+
+## v0.8 - *2011-07-08*
+
+* removes slashes from folder labels
+* optionally rename parent folder entries to real folder names, see `options.js`
+* long breadcrumbs (multiple rows) no longer hide content
+* error folder icons are opaque now
+* refactores js a lot (again...)
+
+
+## v0.7 - *2011-07-07*
+
+* removes shadows
+* smarter tree side bar
+
+
+## v0.6 - *2011-07-05*
+
+* refactores js
+* adds localization, see `options.js`
+
+
+## v0.5.3 - *2011-07-04*
+
+* refactores js
+* adds basic options support via `options.js`
+* adds comments to `options.js`
+* adds optional tree sidebar
+
+
+## v0.5.2 - *2011-07-02*
+
+* details view adjusts to window width
+* links icon for *.gz and *.bz2
+
+
+## v0.5.1 - *2011-07-01*
+
+* disables tree sidebar for now, since it had unwanted side effects
+
+
+## v0.5 - *2011-07-01*
+
+* adds tree sidebar
+* some refactorings
+
+
+## v0.4 - *2011-06-27*
+
+* adds better fallback, in case JavaScript is disabled
+* rewrites js, fixed middle-button click etc. problems
+* refactors css
+* sorts, adds and moves icons and images
+* updates dot.access
+
+
+## v0.3.2 - *2011-06-24*
+
+* removes lib versions from file names
+* adds 'empty' indicator for icons view
+
+
+## v0.3.1 - *2011-06-24*
+
+* refactores js
+* adds `folderClick` and `fileClick` callback hooks
+* fixes .emtpy style
+
+
+## v0.3 - *2011-06-23*
+
+* includes build stuff, files previously found in the base directory are now located in folder `target`
+* styles and scripts are now minified
+* adds Modernizr 2.0.4 for future use
+* updates jQuery to version 1.6.1
+
+
+## v0.2.3 - *2011-06-17*
+
+* more refactoring in main.js
+
+
+## v0.2.2 - *2011-06-16*
+
+* refactores a lot, adds some comments
+* includes fixes from [NumEricR](https://github.com/NumEricR)
+* adds top/bottom message support, only basicly styled
+
+
+## v0.2.1 - *2011-06-16*
+
+* fixes croped filenames
+* fixes missing .png extension in header
+* adds some color to the links
+* adds changelog
+
+
+## v0.2 - *2011-06-15*
+
+* adds icon view
diff --git a/container/srv-http/root/srv/_h5ai/README.md b/container/srv-http/root/srv/_h5ai/README.md
new file mode 100644
index 0000000..66eb547
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/README.md
@@ -0,0 +1,72 @@
+# h5ai
+
+[![license][license-img]][github] [![web][web-img]][web] [![github][github-img]][github]
+
+A modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee.
+
+
+## Important
+
+* Do **not** install any files from the `src` folder, they need to be
+ preprocessed to work correctly!
+* Find a preprocessed package and detailed install instructions on the
+ [project page][web].
+* For bug reports and feature requests please use [issues][github-issues].
+
+
+## Build
+
+There are installation ready packages for the latest [releases][release] and
+[dev builds][develop]. But to build **h5ai** yourself either `git clone` or
+download the repository. From within the root folder run the following
+commands to find a fresh zipball in folder `build` (tested on linux only,
+requires [`node 6.0+`][node] to be installed).
+
+~~~sh
+> npm install
+> npm run build
+~~~
+
+
+## License
+
+The MIT License (MIT)
+
+Copyright (c) 2019 Lars Jung (https://larsjung.de)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+## References
+
+**h5ai** profits from other projects, all of them licensed under the MIT license
+too. Exceptions are some [Material Design icons][material-design-icons] (CC BY 4.0).
+
+
+[web]: https://larsjung.de/h5ai/
+[github]: https://github.com/lrsjng/h5ai
+[github-issues]: https://github.com/lrsjng/h5ai/issues
+[release]: https://release.larsjung.de/h5ai/
+[develop]: https://release.larsjung.de/h5ai/develop/
+[node]: https://nodejs.org
+[material-design-icons]: https://github.com/google/material-design-icons
+
+[license-img]: https://img.shields.io/badge/license-MIT-a0a060.svg?style=flat-square
+[web-img]: https://img.shields.io/badge/web-larsjung.de/h5ai-a0a060.svg?style=flat-squ…
+[github-img]: https://img.shields.io/badge/github-lrsjng/h5ai-a0a060.svg?style=flat-square
diff --git a/container/srv-http/root/srv/_h5ai/private/cache/README.md b/container/srv-http/root/srv/_h5ai/private/cache/README.md
new file mode 100755
index 0000000..60bc416
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/cache/README.md
@@ -0,0 +1,9 @@
+# Cache
+
+Private cache.
+
+This directory is used for server side caching. To use caching make this
+directory writable for your webserver.
+
+There is no critical data in here. You can savely remove any content. This
+will clear the cache.
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json
new file mode 100755
index 0000000..5150c7b
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json
@@ -0,0 +1,18 @@
+{
+ "lang": "afrikaans",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "besonderhede",
+ "download": "aflaai",
+ "empty": "leeg",
+ "files": "lêers",
+ "filter": "filter",
+ "folders": "gidse",
+ "grid": "rooster",
+ "icons": "ikone",
+ "lastModified": "Laas verander",
+ "name": "Naam",
+ "noMatch": "geen resultaat",
+ "parentDirectory": "Hoër Vlak",
+ "size": "Grootte"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json
new file mode 100755
index 0000000..6808e62
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json
@@ -0,0 +1,18 @@
+{
+ "lang": "български",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "детайли",
+ "download": "изтегляне",
+ "empty": "празна",
+ "files": "файлове",
+ "filter": "филтър",
+ "folders": "директории",
+ "grid": "мрежа",
+ "icons": "икони",
+ "lastModified": "Последна промяна",
+ "name": "Име",
+ "noMatch": "няма съвпадение",
+ "parentDirectory": "Предходна директория",
+ "size": "Размер"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json
new file mode 100755
index 0000000..1e34e61
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json
@@ -0,0 +1,18 @@
+{
+ "lang": "čeština",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "Podrobnosti",
+ "download": "Stáhnout",
+ "empty": "Prázdná složka",
+ "files": "souborů",
+ "filter": "Filtr",
+ "folders": "složek",
+ "grid": "Seznam",
+ "icons": "Velké ikony",
+ "lastModified": "Datum změny",
+ "name": "Název",
+ "noMatch": "Žádná shoda",
+ "parentDirectory": "Nadřazený adresář",
+ "size": "Velikost"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json
new file mode 100755
index 0000000..3b8fa06
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json
@@ -0,0 +1,18 @@
+{
+ "lang": "dansk",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "detaljer",
+ "download": "download",
+ "empty": "tom",
+ "files": "filer",
+ "filter": "filter",
+ "folders": "mapper",
+ "grid": "grid",
+ "icons": "ikoner",
+ "lastModified": "Sidst ændret",
+ "name": "Navn",
+ "noMatch": "ingen match",
+ "parentDirectory": "Overordnet mappe",
+ "size": "Størrelse"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json
new file mode 100755
index 0000000..6d8c613
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json
@@ -0,0 +1,22 @@
+{
+ "lang": "deutsch",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "Details",
+ "download": "Download",
+ "empty": "leer",
+ "files": "Dateien",
+ "filter": "filtern",
+ "folders": "Ordner",
+ "grid": "Gitter",
+ "icons": "Icons",
+ "language": "Sprache",
+ "lastModified": "Geändert",
+ "name": "Name",
+ "noMatch": "keine Treffer",
+ "parentDirectory": "Übergeordnetes Verzeichnis",
+ "search": "suchen",
+ "size": "Größe",
+ "tree": "Baum",
+ "view": "Ansicht"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json
new file mode 100755
index 0000000..2d9c00d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json
@@ -0,0 +1,18 @@
+{
+ "lang": "ελληνικά",
+
+ "dateFormat": "DD/MM/YYYY HH:mm",
+ "details": "λεπτομέρειες",
+ "download": "μεταμόρφωση",
+ "empty": "κενό",
+ "files": "αρχεία",
+ "filter": "φίλτρο",
+ "folders": "φάκελοι",
+ "grid": "πλέγμα",
+ "icons": "εικονίδια",
+ "lastModified": "Τελευταία τροποποίηση",
+ "name": "Όνομα",
+ "noMatch": "κανένα αποτέλεσμα",
+ "parentDirectory": "Προηγούμενος Κατάλογος",
+ "size": "Μέγεθος"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json
new file mode 100755
index 0000000..05e9b4e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json
@@ -0,0 +1,23 @@
+/* only here as a reference, these values are the hardcoded defaults */
+{
+ "lang": "english",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "details",
+ "download": "download",
+ "empty": "empty",
+ "files": "files",
+ "filter": "filter",
+ "folders": "folders",
+ "grid": "grid",
+ "icons": "icons",
+ "language": "Language",
+ "lastModified": "Last modified",
+ "name": "Name",
+ "noMatch": "no match",
+ "parentDirectory": "Parent Directory",
+ "search": "search",
+ "size": "Size",
+ "tree": "Tree",
+ "view": "View"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json
new file mode 100755
index 0000000..e42a5b9
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json
@@ -0,0 +1,22 @@
+{
+ "lang": "español",
+
+ "dateFormat": "DD/MM/YYYY HH:mm",
+ "details": "Detalles",
+ "download": "Descargar",
+ "empty": "vacío",
+ "files": "Archivos",
+ "filter": "Filtrar",
+ "folders": "Directorios",
+ "grid": "Cuadrícula",
+ "icons": "Íconos",
+ "language": "Idioma",
+ "lastModified": "Última modificación",
+ "name": "Nombre",
+ "noMatch": "Sin coincidencias",
+ "parentDirectory": "Directorio superior",
+ "search": "buscar",
+ "size": "Tamaño",
+ "tree": "Arbol",
+ "view": "Vista"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json
new file mode 100755
index 0000000..8f3d1dc
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json
@@ -0,0 +1,22 @@
+{
+ "lang": "estonian",
+
+ "dateFormat": "DD-MM-YYYY HH.mm",
+ "details": "täpsem info",
+ "download": "laadi alla",
+ "empty": "tühi",
+ "files": "failid",
+ "filter": "filter",
+ "folders": "kataloogid",
+ "grid": "võre",
+ "icons": "ikoonid",
+ "language": "Keel",
+ "lastModified": "Viimati muudetud",
+ "name": "Nimi",
+ "noMatch": "ei leitud sobivat",
+ "parentDirectory": "Emakataloog",
+ "search": "otsi",
+ "size": "Suurus",
+ "tree": "Puu",
+ "view": "Vaade"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json
new file mode 100755
index 0000000..c19c0ed
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json
@@ -0,0 +1,18 @@
+{
+ "lang": "finnish",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "tiedot",
+ "download": "lataa",
+ "empty": "tyhjä",
+ "files": "tiedostoa",
+ "filter": "suodata",
+ "folders": "hakemistoa",
+ "grid": "ruudukko",
+ "icons": "ikonit",
+ "lastModified": "Viimeksi muokattu",
+ "name": "Nimi",
+ "noMatch": "ei osumia",
+ "parentDirectory": "Ylähakemisto",
+ "size": "Koko"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json
new file mode 100755
index 0000000..9a4ac45
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json
@@ -0,0 +1,22 @@
+{
+ "lang": "français",
+
+ "dateFormat": "DD/MM/YYYY HH:mm",
+ "details": "détails",
+ "download": "télécharger",
+ "empty": "vide",
+ "files": "Fichiers",
+ "filter": "filtrer",
+ "folders": "Répertoires",
+ "grid": "grille",
+ "icons": "icônes",
+ "language": "Langue",
+ "lastModified": "Dernière modification",
+ "name": "Nom",
+ "noMatch": "rien trouvé",
+ "parentDirectory": "Dossier parent",
+ "search": "rechercher",
+ "size": "Taille",
+ "tree": "Arborescence",
+ "view": "Disposition"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json
new file mode 100755
index 0000000..bb37f7f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json
@@ -0,0 +1,17 @@
+{
+ "lang": "עברית",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "פרטים",
+ "download": "הורדה",
+ "empty": "ריק",
+ "files": "קבצים",
+ "filter": "סינון",
+ "folders": "תיקיות",
+ "icons": "צלמיות",
+ "lastModified": "שינוי אחרון",
+ "name": "שם",
+ "noMatch": "אין תוצאות",
+ "parentDirectory": "תיקיית הורה",
+ "size": "גודל"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json
new file mode 100755
index 0000000..5941733
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json
@@ -0,0 +1,18 @@
+{
+ "lang": "हिंदी",
+
+ "dateFormat": "DD.MM.YYYY HH:mm",
+ "details": "विस्तार",
+ "download": "डाउनलोड",
+ "empty": "खाली",
+ "files": "फ़ाइलें",
+ "filter": "फ़िल्टर",
+ "folders": "फोल्डर",
+ "grid": "ग्रिड",
+ "icons": "आइकॉन",
+ "lastModified": "पिछला परिवर्तन",
+ "name": "नाम",
+ "noMatch": "कोई समानता नहीं",
+ "parentDirectory": "मूल डायरेक्टरी",
+ "size": "माप"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json
new file mode 100755
index 0000000..c044db4
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json
@@ -0,0 +1,18 @@
+{
+ "lang": "hrvatski",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "detalji",
+ "download": "preuzmi",
+ "empty": "prazno",
+ "files": "datoteka",
+ "filter": "filter",
+ "folders": "direktorij(a)",
+ "grid": "mreža",
+ "icons": "ikone",
+ "lastModified": "Posljednja izmjena",
+ "name": "Naziv",
+ "noMatch": "nema rezultata",
+ "parentDirectory": "Natrag",
+ "size": "Veličina"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json
new file mode 100755
index 0000000..b2c1b34
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json
@@ -0,0 +1,16 @@
+{
+ "lang": "magyar",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "részletek",
+ "download": "letöltés",
+ "empty": "üres",
+ "files": "fájlok",
+ "folders": "mappák",
+ "icons": "ikonok",
+ "lastModified": "Utoljára módosítva",
+ "name": "Név",
+ "noMatch": "nincs találat",
+ "parentDirectory": "Szülő könyvtár",
+ "size": "Méret"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json
new file mode 100755
index 0000000..cd83337
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json
@@ -0,0 +1,18 @@
+{
+ "lang": "italiano",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "dettagli",
+ "download": "download",
+ "empty": "vuota",
+ "files": "file",
+ "filter": "filtra",
+ "folders": "cartelle",
+ "grid": "griglia",
+ "icons": "icone",
+ "lastModified": "Ultima modifica",
+ "name": "Nome",
+ "noMatch": "nessun risultato",
+ "parentDirectory": "Cartella Superiore",
+ "size": "Dimensione"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json
new file mode 100755
index 0000000..88266e7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json
@@ -0,0 +1,20 @@
+{
+ "lang": "日本語",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "詳細",
+ "download": "ダウンロード",
+ "empty": "(空)",
+ "files": "ファイル",
+ "filter": "フィルター",
+ "folders": "フォルダー",
+ "grid": "グリッド",
+ "icons": "アイコン",
+ "language": "言語",
+ "lastModified": "最終変更日時",
+ "name": "名前",
+ "noMatch": "一致する項目が見つかりません",
+ "parentDirectory": "親ディレクトリへ",
+ "size": "サイズ",
+ "view": "ビュー"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json
new file mode 100755
index 0000000..8c48cdb
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json
@@ -0,0 +1,22 @@
+{
+ "lang": "한국어",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "자세히",
+ "download": "다운로드",
+ "empty": "빈 폴더",
+ "files": "파일",
+ "filter": "필터",
+ "folders": "폴더",
+ "grid": "그리드",
+ "icons": "아이콘",
+ "language": "언어",
+ "lastModified": "최근 수정일",
+ "name": "파일명",
+ "noMatch": "해당파일이 없습니다.",
+ "parentDirectory": "상위폴더",
+ "search": "검색",
+ "size": "크기",
+ "tree": "트리",
+ "view": "보기"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json
new file mode 100755
index 0000000..fa672ce
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json
@@ -0,0 +1,22 @@
+{
+ "lang": "latviešu",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "detaļas",
+ "download": "lejupielādēt",
+ "empty": "tukšs",
+ "files": "faili",
+ "filter": "filtrēt",
+ "folders": "mapes",
+ "grid": "režģis",
+ "icons": "ikonas",
+ "language": "Valoda",
+ "lastModified": "Pēdējoreiz modificēts",
+ "name": "Nosaukums",
+ "noMatch": "nav sakritības",
+ "parentDirectory": "Vecākdirektorijs",
+ "search": "meklēt",
+ "size": "Izmērs",
+ "tree": "Koks",
+ "view": "Skats"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json
new file mode 100755
index 0000000..44a1797
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json
@@ -0,0 +1,15 @@
+{
+ "lang": "norwegian",
+
+ "details": "detaljer",
+ "download": "last ned",
+ "empty": "tom",
+ "files": "filer",
+ "folders": "mapper",
+ "icons": "ikoner",
+ "lastModified": "Sist endret",
+ "name": "Navn",
+ "noMatch": "ingen treff",
+ "parentDirectory": "Overordnet mappe",
+ "size": "Størrelse"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json
new file mode 100755
index 0000000..8310f05
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json
@@ -0,0 +1,22 @@
+{
+ "lang": "nederlands",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "details",
+ "download": "download",
+ "empty": "leeg",
+ "files": "bestanden",
+ "filter": "filter",
+ "folders": "mappen",
+ "grid": "grid",
+ "icons": "iconen",
+ "language": "Taal",
+ "lastModified": "Laatste wijziging",
+ "name": "Naam",
+ "noMatch": "geen overeenkomst",
+ "parentDirectory": "Bovenliggende map",
+ "search": "zoeken",
+ "size": "Grootte",
+ "tree": "Boom",
+ "view": "Bekijk"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json
new file mode 100755
index 0000000..da56967
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json
@@ -0,0 +1,22 @@
+{
+ "lang": "polski",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "szczegóły",
+ "download": "pobierz",
+ "empty": "pusty",
+ "files": "plików",
+ "filter": "filtr",
+ "folders": "folderów",
+ "grid": "kafelki",
+ "icons": "ikony",
+ "language": "Język",
+ "lastModified": "Ostatnia modyfikacja",
+ "name": "Nazwa",
+ "noMatch": "nie znaleziono",
+ "parentDirectory": "Katalog nadrzędny",
+ "search": "szukaj",
+ "size": "Rozmiar",
+ "tree": "Drzewo",
+ "view": "Układ"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json
new file mode 100755
index 0000000..acd7fea
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json
@@ -0,0 +1,18 @@
+{
+ "lang": "português",
+
+ "dateFormat": "DD-MM-YYYY HH:mm",
+ "details": "detalhes",
+ "download": "descarregar",
+ "empty": "vazio",
+ "files": "arquivos",
+ "filter": "filtro",
+ "folders": "pastas",
+ "grid": "grelha",
+ "icons": "ícones",
+ "lastModified": "última modificação",
+ "name": "Nome",
+ "noMatch": "sem resultados",
+ "parentDirectory": "diretório acima",
+ "size": "Tamanho"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json
new file mode 100755
index 0000000..4981dfe
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json
@@ -0,0 +1,15 @@
+{
+ "lang": "română",
+
+ "details": "detalii",
+ "download": "descarcă",
+ "empty": "gol",
+ "files": "fişiere",
+ "folders": "dosar",
+ "icons": "pictograme",
+ "lastModified": "ultima modificare",
+ "name": "nume",
+ "noMatch": "0 rezultate",
+ "parentDirectory": "dosar părinte",
+ "size": "mărime"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json
new file mode 100755
index 0000000..8056a0d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json
@@ -0,0 +1,20 @@
+{
+ "lang": "русский",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "Детали",
+ "download": "Скачать",
+ "empty": "Пусто",
+ "files": "Файлы",
+ "filter": "Фильтр",
+ "folders": "Папки",
+ "grid": "Сетка",
+ "icons": "Иконки",
+ "language": "Язык",
+ "lastModified": "Последние изменения",
+ "name": "Имя",
+ "noMatch": "Нет совпадений",
+ "parentDirectory": "Главная директория",
+ "size": "Размер",
+ "view": "Вид"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json
new file mode 100755
index 0000000..cfc9e45
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json
@@ -0,0 +1,13 @@
+{
+ "lang": "slovenčina",
+
+ "details": "podrobnosti",
+ "empty": "prázdny",
+ "files": "súborov",
+ "folders": "priečinkov",
+ "icons": "ikony",
+ "lastModified": "Upravené",
+ "name": "Názov",
+ "parentDirectory": "Nadriadený priečinok",
+ "size": "Velkosť"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json
new file mode 100755
index 0000000..5cdda21
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json
@@ -0,0 +1,18 @@
+{
+ "lang": "slovenščina",
+
+ "dateFormat": "DD. MM. YYYY HH:mm",
+ "details": "podrobnosti",
+ "download": "prenesi",
+ "empty": "prazno",
+ "files": "datoteke",
+ "filter": "filter",
+ "folders": "mape",
+ "grid": "mreža",
+ "icons": "ikone",
+ "lastModified": "Zadnja sprememba",
+ "name": "Ime",
+ "noMatch": "ni zadetkov",
+ "parentDirectory": "Nadrejena mapa",
+ "size": "Velikost"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json
new file mode 100755
index 0000000..845eeab
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json
@@ -0,0 +1,15 @@
+{
+ "lang": "srpski",
+
+ "details": "detalji",
+ "download": "download",
+ "empty": "prazno",
+ "files": "fajlovi",
+ "folders": "direktorijum",
+ "icons": "ikone",
+ "lastModified": "Poslednja modifikacija",
+ "name": "Ime",
+ "noMatch": "bez poklapanja",
+ "parentDirectory": "Roditeljski direktorijum",
+ "size": "Veličina"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json
new file mode 100755
index 0000000..75638e5
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json
@@ -0,0 +1,16 @@
+{
+ "lang": "svenska",
+
+ "details": "detaljerad",
+ "download": "ladda ner",
+ "empty": "tom",
+ "files": "filer",
+ "folders": "kataloger",
+ "grid": "rutnät",
+ "icons": "ikoner",
+ "lastModified": "Senast ändrad",
+ "name": "Filnamn",
+ "noMatch": "ingen matchning",
+ "parentDirectory": "Till överordnad mapp",
+ "size": "Filstorlek"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json
new file mode 100755
index 0000000..45cfc92
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json
@@ -0,0 +1,14 @@
+{
+ "lang": "türkçe",
+
+ "details": "detaylar",
+ "download": "indir",
+ "empty": "boş",
+ "files": "dosyalar",
+ "folders": "klasörler",
+ "icons": "ikonlar",
+ "lastModified": "Son Düzenleme",
+ "name": "İsim",
+ "parentDirectory": "Üst Dizin",
+ "size": "Boyut"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json
new file mode 100755
index 0000000..62908f5
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json
@@ -0,0 +1,18 @@
+{
+ "lang": "українська",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "Деталі",
+ "download": "Завантажити",
+ "empty": "Порожньо",
+ "files": "Файли(ів)",
+ "filter": "Фільтр",
+ "folders": "Тек(и)",
+ "grid": "Гратка",
+ "icons": "Піктограми",
+ "lastModified": "Останні зміни",
+ "name": "Ім'я",
+ "noMatch": "Немає співпадінь",
+ "parentDirectory": "Головна тека",
+ "size": "Розмір"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json
new file mode 100755
index 0000000..7cdba51
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json
@@ -0,0 +1,23 @@
+{
+ "lang": "简体中文",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "详情",
+ "download": "下载",
+ "empty": "空文件夹",
+ "files": "文件",
+ "filter": "过滤",
+ "folders": "文件夹",
+ "grid": "网格",
+ "icons": "图标",
+ "language": "语言",
+ "lastModified": "修改时间",
+ "name": "文件名",
+ "noMatch": "无匹配项",
+ "parentDirectory": "父文件夹",
+ "search": "搜索",
+ "size": "大小",
+ "tree": "树形目录",
+ "view": "视图",
+ "info": "信息"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json
new file mode 100755
index 0000000..7567f0d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json
@@ -0,0 +1,23 @@
+{
+ "lang": "正體中文",
+
+ "dateFormat": "YYYY-MM-DD HH:mm",
+ "details": "詳細資料",
+ "download": "下載",
+ "empty": "空資料夾",
+ "files": "檔案",
+ "filter": "過濾",
+ "folders": "資料夾",
+ "grid": "網格",
+ "icons": "圖示",
+ "language": "語言",
+ "lastModified": "上次修改",
+ "name": "檔名",
+ "noMatch": "沒有符合的檔案",
+ "parentDirectory": "上層目錄",
+ "search": "搜尋",
+ "size": "大小",
+ "tree": "樹形目錄",
+ "view": "檢視",
+ "info": "資訊"
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/options.json b/container/srv-http/root/srv/_h5ai/private/conf/options.json
new file mode 100755
index 0000000..69a7add
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/options.json
@@ -0,0 +1,392 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+{
+ /*
+ Password hash.
+
+ SHA512 hash of the info page password, the preset password is the empty string.
+ Online hash generator: http://md5hashing.net/hashing/sha512
+ */
+ "passhash": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
+
+
+
+ /*
+ Resources.
+
+ Additional script and style tags added to all pages. Paths not beginning
+ with "http://", "https://" or "/" will be looked up relative to
+ "_h5ai/public/ext/" (no check for existence).
+
+ - scripts: array of strings
+ - styles: array of strings
+ */
+ "resources": {
+ "scripts": [],
+ "styles": [
+ "//fonts.googleapis.com/css?family=Ubuntu:300,400,700%7CUbuntu+Mono:400,700"
+ ]
+ },
+
+
+
+ /*
+ General view options.
+
+ - binaryPrefix: boolean, set to true uses 1024B=1KiB when formatting file sizes (see http://en.wikipedia.org/wiki/Binary_prefix)
+ - disableSidebar: boolean, hides sidebar and toggle button
+ - fallbackMode: boolean, serve fallback mode
+ - fastBrowsing: boolean, use History API if available (no need to reload the whole page)
+ - fonts: array of strings, fonts to use in regular context
+ - fontsMono: array of strings, fonts to use in monopspaced context
+ - hidden: array of strings, don't list items matching these regular expressions
+ - hideFolders: boolean, hide all folders in the main view
+ - hideIf403: boolean, hide files and folders that are not readable by the server
+ - hideParentFolder: boolean, hide parent folder links in the main view
+ - maxIconSize: number, max size for icons in the main view
+ - modes: array of strings, subset of ["details", "grid", "icons"]
+ the first value indicates the default view mode. If only one value
+ is given the view mode is fixed and the selector buttons are hidden.
+ The user selected view mode is also stored local in modern browsers
+ so that it will be persistent.
+ - modeToggle: boolean, show a view mode toggle in the toolbar, or "next"
+ - setParentFolderLabels: boolean, set parent folder labels to real folder names
+ - sizes: array of numbers
+ the first value indicates the default view size. If only one value
+ is given the view size is fixed and the selector buttons are hidden.
+ The user selected view size is also stored local in modern browsers
+ so that it will be persistent.
+ - theme: string, name of one of the folders in "_h5ai/images/themes", defaults to "default"
+ - unmanaged: array of strings, don't manage folders containing one of those files
+ - unmanagedInNewWindow: boolean, open unmanaged links in new window/tab
+ */
+ "view": {
+ "binaryPrefix": false,
+ "disableSidebar": false,
+ "fallbackMode": false,
+ "fastBrowsing": true,
+ "fonts": ["Ubuntu", "Roboto", "Helvetica", "Arial", "sans-serif"],
+ "fontsMono": ["Ubuntu Mono", "Monaco", "Lucida Sans Typewriter", "monospace"],
+ "hidden": ["^\\.", "^_h5ai"],
+ "hideFolders": false,
+ "hideIf403": true,
+ "hideParentFolder": false,
+ "maxIconSize": 40,
+ "modes": ["details", "grid", "icons"],
+ "modeToggle": false,
+ "setParentFolderLabels": true,
+ "sizes": [20, 40, 60, 80, 100, 140, 180, 220, 260, 300],
+ "theme": "comity",
+ "unmanaged": ["index.html", "index.htm", "index.php"],
+ "unmanagedInNewWindow": false
+ },
+
+
+
+ /*** Extensions (in alphabetical order) ***/
+
+ /*
+ Watch and update current folder content.
+
+ - interval: number, update interval in milliseconds, at least 1000
+ */
+ "autorefresh": {
+ "enabled": false,
+ "interval": 5000
+ },
+
+ /*
+ Show a clickable breadcrumb.
+ */
+ "crumb": {
+ "enabled": true
+ },
+
+ /*
+ Allow customized header and footer files.
+ First checks for files "_h5ai.header.html" and "_h5ai.footer.html" in the current directory.
+ If not successful it checks all parent directories (starting in the current directory) for
+ files "_h5ai.headers.html" and "_h5ai.footers.html".
+ Note the different filenames: "header" (only current) - "headers" (current and sub directories)!
+ The file's content will be placed inside a <div/> tag above/below the main content.
+ If a file's extension is ".md" instead of ".html" its content will be interpreted as markdown.
+ */
+ "custom": {
+ "enabled": true
+ },
+
+ /*
+ Enable packaged download of selected entries.
+ To select files the "select"-extension needs to be enabled.
+
+ - type: string, "php-tar", "shell-tar" or "shell-zip"
+ - packageName: string, basename of the download package, null for current filename or foldername
+ - alwaysVisible: boolean, always show download button (defaults to download the current folder)
+ */
+ "download": {
+ "enabled": true,
+ "type": "php-tar",
+ "packageName": null,
+ "alwaysVisible": false
+ },
+
+ /*
+ Allow filtering the displayed files and folders in current folder.
+ Checks for substrings.
+
+ If advanced is enabled it checks entries for right order of characters,
+ i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated
+ sequences get OR-ed. Searches will be treated as JavaScript regular
+ expressions if you prefix them with "re:".
+
+ - advanced: boolean, use advanced pattern parsing
+ - debounceTime: number, debounce wait time in milliseconds
+ - ignorecase: boolean, ignore case
+ */
+ "filter": {
+ "enabled": false,
+ "advanced": true,
+ "debounceTime": 100,
+ "ignorecase": true
+ },
+
+ /*
+ Calc the size of folders.
+ This operation is real slow. The calculated sizes differ slightly for both
+ calculation types since "php" only adds the file size, while "shell-du"
+ also adds the sizes for the actual folder files.
+
+ - type: string, "php" (sloooow) or "shell-du" (sloow)
+ */
+ "foldersize": {
+ "enabled": true,
+ "type": "php"
+ },
+
+ /*
+ Adds Google Universial Analytics asynchronous tracking code.
+ see: https://developers.google.com/analytics/devguides/collection/analyticsjs/
+
+ - id: string, account ID
+ */
+ "google-analytics-ua": {
+ "enabled": false,
+ "id": "UA-000000-0"
+ },
+
+ /*
+ Enable a generic info side bar.
+
+ - show: boolean, initial visible to first time users
+ - qrcode: boolean, show a QR-Code
+ - qrColor: string, QR-Code fill color
+ */
+ "info": {
+ "enabled": true,
+ "show": false,
+ "qrcode": true,
+ "qrFill": "#999",
+ "qrBack": "#fff"
+ },
+
+ /*
+ Localization, for example "en", "de" etc. - see "_h5ai/conf/l10n" folder for
+ possible values. Adjust it to your needs. If lang is not found
+ it defaults to "en".
+
+ - lang: string, default language
+ - useBroserLang: boolean, try to use browser language
+ */
+ "l10n": {
+ "enabled": true,
+ "lang": "en",
+ "useBrowserLang": true
+ },
+
+ /*
+ Adds Piwik tracker javascript code.
+
+ - baseURL: string, do not include the protocol, e.g. "mydomain.tld/piwik"
+ - idSite: number
+ */
+ "piwik-analytics": {
+ "enabled": false,
+ "baseURL": "some/url",
+ "idSite": 1
+ },
+
+ /*
+ Play a audio preview on click.
+
+ - autoplay: start playing as soon as ready
+ - types: array of strings
+ */
+ "preview-aud": {
+ "enabled": true,
+ "autoplay": true,
+ "types": ["aud"]
+ },
+
+ /*
+ Show an image preview on click.
+
+ - types: array of strings
+ - size: number, sample size, or false for original size
+ */
+ "preview-img": {
+ "enabled": true,
+ "size": false,
+ "types": ["img", "img-bmp", "img-gif", "img-ico", "img-jpg", "img-png", "img-raw", "img-svg"]
+ },
+
+ /*
+ Show text file preview on click.
+
+ Available styles are:
+ 0: floating text
+ 1: fixed width text
+ 2: markdown
+ 3: syntax highlighting
+
+ - styles: dict string to int, maps types to styles
+ */
+ "preview-txt": {
+ "enabled": true,
+ "styles": {
+ "txt": 1,
+ "txt-authors": 1,
+ "txt-c": 3,
+ "txt-cpp": 3,
+ "txt-css": 3,
+ "txt-diff": 1,
+ "txt-go": 3,
+ "txt-h": 3,
+ "txt-hpp": 3,
+ "txt-install": 1,
+ "txt-js": 3,
+ "txt-json": 3,
+ "txt-less": 3,
+ "txt-license": 1,
+ "txt-log": 1,
+ "txt-makefile": 1,
+ "txt-md": 2,
+ "txt-py": 3,
+ "txt-rb": 3,
+ "txt-readme": 1,
+ "txt-rtf": 1,
+ "txt-rust": 3,
+ "txt-script": 3,
+ "txt-xml": 1
+ }
+ },
+
+ /*
+ Play a video preview on click.
+
+ - autoplay: start playing as soon as ready
+ - types: array of strings
+ */
+ "preview-vid": {
+ "enabled": true,
+ "autoplay": true,
+ "types": ["vid-avi", "vid-flv", "vid-mkv", "vid-mov", "vid-mp4", "vid-mpg", "vid-webm"]
+ },
+
+ /*
+ Allow searching files and folders in and below current folder.
+ Checks for substrings.
+
+ If advanced is enabled it checks entries for right order of characters,
+ i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated
+ sequences get OR-ed. Searches will be treated as JavaScript regular
+ expressions if you prefix them with "re:".
+
+ - advanced: boolean, use advanced pattern parsing
+ - debounceTime: number, debounce wait time in milliseconds
+ - ignorecase: boolean, ignore case
+ */
+ "search": {
+ "enabled": false,
+ "advanced": true,
+ "debounceTime": 300,
+ "ignorecase": true
+ },
+
+ /*
+ Make entries selectable.
+ At the moment only needed for packaged download.
+
+ - clickndrag: boolean, allow first mouse button + drag selection
+ - checkboxes: boolean, show a checkbox on mouse over item
+ */
+ "select": {
+ "enabled": true,
+ "clickndrag": true,
+ "checkboxes": true
+ },
+
+ /*
+ Default sort order.
+ "column" and "reverse" are locally stored.
+
+ - column: number, 0 for "Name", 1 for "Date", 2 for "Size"
+ - reverse: boolean, false for ascending, true for descending
+ - ignorecase: boolean, compare ignorecase
+ - natural: boolean, use natural sort order
+ - folders: number, where to place folders, 0 for "top", 1 for "in place", 2 for "bottom"
+ */
+ "sort": {
+ "enabled": true,
+ "column": 0,
+ "reverse": false,
+ "ignorecase": true,
+ "natural": true,
+ "folders": 0
+ },
+
+ /*
+ Show thumbnails for image files. Needs the "/_h5ai/cache" folder to be
+ writable for the web Server.
+
+ - img: array of strings
+ - mov: array of strings
+ - doc: array of strings
+ - delay: number, delay in milliseconds after "dom-ready" before thumb-requesting starts
+ - size: number, size in pixel of the generated thumbnails
+ - exif: boolean, use included EXIF thumbs if possible
+ - chunksize: int, number of thumbs per request
+ */
+ "thumbnails": {
+ "enabled": true,
+ "img": ["img-bmp", "img-gif", "img-ico", "img-jpg", "img-png"],
+ "mov": ["vid-avi", "vid-flv", "vid-mkv", "vid-mov", "vid-mp4", "vid-mpg", "vid-webm"],
+ "doc": ["x-pdf", "x-ps"],
+ "delay": 1,
+ "size": 240,
+ "exif": false,
+ "chunksize": 20
+ },
+
+ /*
+ Replace window title with current breadcrumb.
+ */
+ "title": {
+ "enabled": true
+ },
+
+ /*
+ Show a folder tree.
+ Note that this might affect performance significantly.
+
+ - show: boolean, initial visible to first time users
+ - maxSubfolders: number, max number of subfolders to show in tree
+ - naturalSort: boolean, use natural sort order for folders
+ - ignorecase: boolean, sort ignorecase
+ */
+ "tree": {
+ "enabled": true,
+ "show": true,
+ "maxSubfolders": 50,
+ "naturalSort": true,
+ "ignorecase": true
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/conf/types.json b/container/srv-http/root/srv/_h5ai/private/conf/types.json
new file mode 100755
index 0000000..0b83a3e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/conf/types.json
@@ -0,0 +1,76 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+{
+ "ar": ["*.tar.bz2", "*.crx"],
+ "ar-apk": ["*.apk"],
+ "ar-deb": ["*.deb"],
+ "ar-gz": ["*.gz", "*.tar.gz", "*.tgz"],
+ "ar-rar": ["*.rar"],
+ "ar-rpm": ["*.rpm"],
+ "ar-tar": ["*.tar"],
+ "ar-zip": ["*.7z", "*.bz2", "*.jar", "*.lzma", "*.war", "*.z", "*.Z", "*.zip"],
+ "aud": ["*.aif", "*.aiff", "*.flac", "*.m4a", "*.mid", "*.mp3", "*.mpa", "*.ra", "*.ogg", "*.wav", "*.wma"],
+ "aud-pls": ["*.m3u", "*.m3u8", "*.pls"],
+ "bin": ["*.class", "*.o", "*.so"],
+ "bin-exe": ["*.bat", "*.cmd", "*.exe"],
+ "img": ["*.xpm"],
+ "img-bmp": ["*.bmp"],
+ "img-gif": ["*.gif"],
+ "img-ico": ["*.ico"],
+ "img-jpg": ["*.jpg", "*.jpeg"],
+ "img-png": ["*.png"],
+ "img-raw": ["*.cr2", "*.nef"],
+ "img-svg": ["*.svg"],
+ "img-tiff": ["*.tiff"],
+ "txt": ["*.text", "*.txt"],
+ "txt-build": ["*.pom", "build.xml", "pom.xml"],
+ "txt-c": ["*.c"],
+ "txt-cpp": ["*.cpp"],
+ "txt-css": ["*.css"],
+ "txt-diff": ["*.diff", "*.patch"],
+ "txt-go": ["*.go"],
+ "txt-h": ["*.h"],
+ "txt-html": ["*.htm", "*.html", "*.shtml", "*.xhtml"],
+ "txt-hpp": ["*.hpp"],
+ "txt-java": ["*.java"],
+ "txt-scala": ["*.scala"],
+ "txt-js": ["*.js"],
+ "txt-json": ["*.json"],
+ "txt-less": ["*.less"],
+ "txt-log": ["*.log", "changelog*"],
+ "txt-md": ["*.markdown", "*.md"],
+ "txt-php": ["*.php"],
+ "txt-py": ["*.py"],
+ "txt-rb": ["*.rb"],
+ "txt-rss": ["*.rss"],
+ "txt-rtf": ["*.rtf"],
+ "txt-rust": ["*.rs", "*.rlib"],
+ "txt-script": ["*.conf", "*.bsh", "*.csh", "*.ini", "*.ksh", "*.sh", "*.shar", "*.tcl", "*.zsh"],
+ "txt-source": [],
+ "txt-tex": ["*.tex"],
+ "txt-vcal": ["*.vcal"],
+ "txt-xml": ["*.xml"],
+ "vid": [],
+ "vid-avi": ["*.avi"],
+ "vid-flv": ["*.flv"],
+ "vid-mkv": ["*.mkv"],
+ "vid-mov": ["*.mov"],
+ "vid-mp4": ["*.mp4", "*.m4v"],
+ "vid-mpg": ["*.mpg"],
+ "vid-rm": ["*.rm"],
+ "vid-swf": ["*.swf"],
+ "vid-ts": ["*.ts"],
+ "vid-vob": ["*.vob"],
+ "vid-webm": ["*.webm"],
+ "vid-wmv": ["*.wmv"],
+ "x": [],
+ "x-bak": ["*.bak", "*~"],
+ "x-calc": ["*.ods", "*.ots", "*.xlr", "*.xls", "*.xlsx"],
+ "x-disc": ["*.cue", "*.iso"],
+ "x-doc": ["*.doc", "*.docx", "*.odm", "*.odt", "*.ott"],
+ "x-draw": ["*.drw"],
+ "x-eps": ["*.eps"],
+ "x-pdf": ["*.pdf"],
+ "x-pres": ["*.odp", "*.otp", "*.pps", "*.ppt", "*.pptx"],
+ "x-ps": ["*.ps"],
+ "x-psd": ["*.psd"]
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php b/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php
new file mode 100755
index 0000000..4356523
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php
@@ -0,0 +1,45 @@
+<?php
+
+class Bootstrap {
+ private static $autopaths = ['core', 'ext'];
+
+ public static function run() {
+ spl_autoload_register(['Bootstrap', 'autoload']);
+ putenv('LANG=en_US.UTF-8');
+ setlocale(LC_CTYPE, 'en_US.UTF-8');
+ date_default_timezone_set(@date_default_timezone_get());
+ session_start();
+
+ $session = new Session($_SESSION);
+ $request = new Request($_REQUEST, file_get_contents('php://input'));
+ $setup = new Setup($request->query_boolean('refresh', false));
+ $context = new Context($session, $request, $setup);
+
+ if ($context->is_api_request()) {
+ (new Api($context))->apply();
+ } elseif ($context->is_info_request()) {
+ $public_href = $setup->get('PUBLIC_HREF');
+ $x_head_tags = $context->get_x_head_html();
+ $fallback_mode = false;
+ require __DIR__ . '/pages/info.php';
+ } else {
+ $public_href = $setup->get('PUBLIC_HREF');
+ $x_head_tags = $context->get_x_head_html();
+ $fallback_mode = $context->is_fallback_mode();
+ $fallback_html = (new Fallback($context))->get_html();
+ require __DIR__ . '/pages/index.php';
+ }
+ }
+
+ public static function autoload($class_name) {
+ $filename = 'class-' . strtolower($class_name) . '.php';
+
+ foreach (Bootstrap::$autopaths as $path) {
+ $file = __DIR__ . '/' . $path . '/' . $filename;
+ if (file_exists($file)) {
+ require_once $file;
+ return true;
+ }
+ }
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php
new file mode 100755
index 0000000..30eadd1
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php
@@ -0,0 +1,109 @@
+<?php
+
+class Api {
+ private $context;
+ private $request;
+ private $setup;
+
+ public function __construct($context) {
+ $this->context = $context;
+ $this->request = $context->get_request();
+ $this->setup = $context->get_setup();
+ }
+
+ public function apply() {
+ $action = $this->request->query('action');
+ $supported = ['download', 'get', 'login', 'logout'];
+ Util::json_fail(Util::ERR_UNSUPPORTED, 'unsupported action', !in_array($action, $supported));
+
+ $methodname = 'on_' . $action;
+ $this->$methodname();
+ }
+
+ private function on_download() {
+ Util::json_fail(Util::ERR_DISABLED, 'download disabled', !$this->context->query_option('download.enabled', false));
+
+ $as = $this->request->query('as');
+ $type = $this->request->query('type');
+ $base_href = $this->request->query('baseHref');
+ $hrefs = $this->request->query('hrefs', '');
+
+ $archive = new Archive($this->context);
+
+ set_time_limit(0);
+ header('Content-Type: application/octet-stream');
+ header('Content-Disposition: attachment; filename="' . $as . '"');
+ header('Connection: close');
+ $ok = $archive->output($type, $base_href, $hrefs);
+
+ Util::json_fail(Util::ERR_FAILED, 'packaging failed', !$ok);
+ exit;
+ }
+
+ private function on_get() {
+ $response = [];
+
+ foreach (['langs', 'options', 'types'] as $name) {
+ if ($this->request->query_boolean($name, false)) {
+ $methodname = 'get_' . $name;
+ $response[$name] = $this->context->$methodname();
+ }
+ }
+
+ if ($this->request->query_boolean('setup', false)) {
+ $response['setup'] = $this->setup->to_jsono($this->context->is_admin());
+ }
+
+ if ($this->request->query_boolean('theme', false)) {
+ $theme = new Theme($this->context);
+ $response['theme'] = $theme->get_icons();
+ }
+
+ if ($this->request->query('items', false)) {
+ $href = $this->request->query('items.href');
+ $what = $this->request->query_numeric('items.what');
+ $response['items'] = $this->context->get_items($href, $what);
+ }
+
+ if ($this->request->query('custom', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'custom disabled', !$this->context->query_option('custom.enabled', false));
+ $href = $this->request->query('custom');
+ $custom = new Custom($this->context);
+ $response['custom'] = $custom->get_customizations($href);
+ }
+
+ if ($this->request->query('l10n', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'l10n disabled', !$this->context->query_option('l10n.enabled', false));
+ $iso_codes = $this->request->query_array('l10n');
+ $iso_codes = array_filter($iso_codes);
+ $response['l10n'] = $this->context->get_l10n($iso_codes);
+ }
+
+ if ($this->request->query('search', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'search disabled', !$this->context->query_option('search.enabled', false));
+ $href = $this->request->query('search.href');
+ $pattern = $this->request->query('search.pattern');
+ $ignorecase = $this->request->query_boolean('search.ignorecase', false);
+ $search = new Search($this->context);
+ $response['search'] = $search->get_items($href, $pattern, $ignorecase);
+ }
+
+ if ($this->request->query('thumbs', false)) {
+ Util::json_fail(Util::ERR_DISABLED, 'thumbnails disabled', !$this->context->query_option('thumbnails.enabled', false));
+ Util::json_fail(Util::ERR_UNSUPPORTED, 'thumbnails not supported', !$this->setup->get('HAS_PHP_JPEG'));
+ $thumbs = $this->request->query_array('thumbs');
+ $response['thumbs'] = $this->context->get_thumbs($thumbs);
+ }
+
+ Util::json_exit($response);
+ }
+
+ private function on_login() {
+ $pass = $this->request->query('pass');
+ Util::json_exit(['asAdmin' => $this->context->login_admin($pass)]);
+ }
+
+ private function on_logout() {
+ Util::json_exit(['asAdmin' => $this->context->logout_admin()]);
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php
new file mode 100755
index 0000000..5484f8f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php
@@ -0,0 +1,294 @@
+<?php
+
+class Context {
+ private static $DEFAULT_PASSHASH = 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e';
+ private static $AS_ADMIN_SESSION_KEY = 'AS_ADMIN';
+
+ private $session;
+ private $request;
+ private $setup;
+ private $options;
+ private $passhash;
+
+ public function __construct($session, $request, $setup) {
+ $this->session = $session;
+ $this->request = $request;
+ $this->setup = $setup;
+
+ $this->options = Json::load($this->setup->get('CONF_PATH') . '/options.json');
+
+ $this->passhash = $this->query_option('passhash', '');
+ $this->options['hasCustomPasshash'] = strcasecmp($this->passhash, Context::$DEFAULT_PASSHASH) !== 0;
+ unset($this->options['passhash']);
+ }
+
+ public function get_session() {
+ return $this->session;
+ }
+
+ public function get_request() {
+ return $this->request;
+ }
+
+ public function get_setup() {
+ return $this->setup;
+ }
+
+ public function get_options() {
+ return $this->options;
+ }
+
+ public function query_option($keypath = '', $default = null) {
+ return Util::array_query($this->options, $keypath, $default);
+ }
+
+ public function get_types() {
+ return Json::load($this->setup->get('CONF_PATH') . '/types.json');
+ }
+
+ public function login_admin($pass) {
+ $this->session->set(Context::$AS_ADMIN_SESSION_KEY, strcasecmp(hash('sha512', $pass), $this->passhash) === 0);
+ return $this->session->get(Context::$AS_ADMIN_SESSION_KEY);
+ }
+
+ public function logout_admin() {
+ $this->session->set(Context::$AS_ADMIN_SESSION_KEY, false);
+ return $this->session->get(Context::$AS_ADMIN_SESSION_KEY);
+ }
+
+ public function is_admin() {
+ return $this->session->get(Context::$AS_ADMIN_SESSION_KEY);
+ }
+
+ public function is_api_request() {
+ return strtolower($this->setup->get('REQUEST_METHOD')) === 'post';
+ }
+
+ public function is_info_request() {
+ return Util::starts_with($this->setup->get('REQUEST_HREF') . '/', $this->setup->get('PUBLIC_HREF'));
+ }
+
+ public function is_text_browser() {
+ return preg_match('/curl|links|lynx|w3m/i', $this->setup->get('HTTP_USER_AGENT')) === 1;
+ }
+
+ public function is_fallback_mode() {
+ return $this->query_option('view.fallbackMode', false) || $this->is_text_browser();
+ }
+
+ public function to_href($path, $trailing_slash = true) {
+ $rel_path = substr($path, strlen($this->setup->get('ROOT_PATH')));
+ $parts = explode('/', $rel_path);
+ $encoded_parts = [];
+ foreach ($parts as $part) {
+ if ($part != '') {
+ $encoded_parts[] = rawurlencode($part);
+ }
+ }
+
+ return Util::normalize_path($this->setup->get('ROOT_HREF') . implode('/', $encoded_parts), $trailing_slash);
+ }
+
+ public function to_path($href) {
+ $rel_href = substr($href, strlen($this->setup->get('ROOT_HREF')));
+ return Util::normalize_path($this->setup->get('ROOT_PATH') . '/' . rawurldecode($rel_href));
+ }
+
+ public function is_hidden($name) {
+ // always hide
+ if ($name === '.' || $name === '..') {
+ return true;
+ }
+
+ foreach ($this->query_option('view.hidden', []) as $re) {
+ $re = Util::wrap_pattern($re);
+ if (preg_match($re, $name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function read_dir($path) {
+ $names = [];
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if (
+ $this->is_hidden($name)
+ || $this->is_hidden($this->to_href($path) . $name)
+ || (!is_readable($path . '/' . $name) && $this->query_option('view.hideIf403', false))
+ ) {
+ continue;
+ }
+ $names[] = $name;
+ }
+ }
+ return $names;
+ }
+
+ public function is_managed_href($href) {
+ return $this->is_managed_path($this->to_path($href));
+ }
+
+ public function is_managed_path($path) {
+ if (!is_dir($path) || strpos($path, '../') !== false || strpos($path, '/..') !== false || $path === '..') {
+ return false;
+ }
+
+ if (strpos($path, $this->setup->get('PUBLIC_PATH')) === 0) {
+ return false;
+ }
+
+ if (strpos($path, $this->setup->get('PRIVATE_PATH')) === 0) {
+ return false;
+ }
+
+ foreach ($this->query_option('view.unmanaged', []) as $name) {
+ if (file_exists($path . '/' . $name)) {
+ return false;
+ }
+ }
+
+ while ($path !== $this->setup->get('ROOT_PATH')) {
+ if (@is_dir($path . '/_h5ai/private/conf')) {
+ return false;
+ }
+ $parent_path = Util::normalize_path(dirname($path));
+ if ($parent_path === $path) {
+ return false;
+ }
+ $path = $parent_path;
+ }
+ return true;
+ }
+
+ public function get_current_path() {
+ $current_href = Util::normalize_path($this->setup->get('REQUEST_HREF'), true);
+ $current_path = $this->to_path($current_href);
+
+ if (!is_dir($current_path)) {
+ $current_path = Util::normalize_path(dirname($current_path), false);
+ }
+
+ return $current_path;
+ }
+
+ public function get_items($href, $what) {
+ if (!$this->is_managed_href($href)) {
+ return [];
+ }
+
+ $cache = [];
+ $folder = Item::get($this, $this->to_path($href), $cache);
+
+ // add content of subfolders
+ if ($what >= 2 && $folder !== null) {
+ foreach ($folder->get_content($cache) as $item) {
+ $item->get_content($cache);
+ }
+ $folder = $folder->get_parent($cache);
+ }
+
+ // add content of this folder and all parent folders
+ while ($what >= 1 && $folder !== null) {
+ $folder->get_content($cache);
+ $folder = $folder->get_parent($cache);
+ }
+
+ uasort($cache, ['Item', 'cmp']);
+ $result = [];
+ foreach ($cache as $p => $item) {
+ $result[] = $item->to_json_object();
+ }
+
+ return $result;
+ }
+
+ public function get_langs() {
+ $langs = [];
+ $l10n_path = $this->setup->get('CONF_PATH') . '/l10n';
+ if (is_dir($l10n_path)) {
+ if ($dir = opendir($l10n_path)) {
+ while (($file = readdir($dir)) !== false) {
+ if (Util::ends_with($file, '.json')) {
+ $translations = Json::load($l10n_path . '/' . $file);
+ $langs[basename($file, '.json')] = $translations['lang'];
+ }
+ }
+ closedir($dir);
+ }
+ }
+ ksort($langs);
+ return $langs;
+ }
+
+ public function get_l10n($iso_codes) {
+ $results = [];
+
+ foreach ($iso_codes as $iso_code) {
+ $file = $this->setup->get('CONF_PATH') . '/l10n/' . $iso_code . '.json';
+ $results[$iso_code] = Json::load($file);
+ $results[$iso_code]['isoCode'] = $iso_code;
+ }
+
+ return $results;
+ }
+
+ public function get_thumbs($requests) {
+ $hrefs = [];
+
+ foreach ($requests as $req) {
+ $thumb = new Thumb($this);
+ $hrefs[] = $thumb->thumb($req['type'], $req['href'], $req['width'], $req['height']);
+ }
+
+ return $hrefs;
+ }
+
+ private function prefix_x_head_href($href) {
+ if (preg_match('@^(https?://|/)@i', $href)) {
+ return $href;
+ }
+
+ return $this->setup->get('PUBLIC_HREF') . 'ext/' . $href;
+ }
+
+ private function get_fonts_html() {
+ $fonts = $this->query_option('view.fonts', []);
+ $fonts_mono = $this->query_option('view.fontsMono', []);
+
+ $html = '<style class="x-head">';
+
+ if (sizeof($fonts) > 0) {
+ $html .= '#root,input,select{font-family:"' . implode('","', $fonts) . '"!important}';
+ }
+
+ if (sizeof($fonts_mono) > 0) {
+ $html .= 'pre,code{font-family:"' . implode('","', $fonts_mono) . '"!important}';
+ }
+
+ $html .= '</style>';
+
+ return $html;
+ }
+
+ public function get_x_head_html() {
+ $scripts = $this->query_option('resources.scripts', []);
+ $styles = $this->query_option('resources.styles', []);
+
+ $html = '';
+
+ foreach ($styles as $href) {
+ $html .= '<link rel="stylesheet" href="' . $this->prefix_x_head_href($href) . '" class="x-head">';
+ }
+
+ foreach ($scripts as $href) {
+ $html .= '<script src="' . $this->prefix_x_head_href($href) . '" class="x-head"></script>';
+ }
+
+ $html .= $this->get_fonts_html();
+
+ return $html;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php
new file mode 100755
index 0000000..7bd317f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php
@@ -0,0 +1,54 @@
+<?php
+
+class Fallback {
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function get_html($path = null) {
+ if (!$path) {
+ $path = $this->context->get_current_path();
+ }
+ $fallback_images_href = $this->context->get_setup()->get('PUBLIC_HREF') . 'images/fallback/';
+
+ $cache = [];
+ $folder = Item::get($this->context, $path, $cache);
+ $items = $folder->get_content($cache);
+ uasort($items, ['Item', 'cmp']);
+
+ $html = '<table>';
+
+ $html .= '<tr>';
+ $html .= '<th class="fb-i"></th>';
+ $html .= '<th class="fb-n"><span>Name</span></th>';
+ $html .= '<th class="fb-d"><span>Last modified</span></th>';
+ $html .= '<th class="fb-s"><span>Size</span></th>';
+ $html .= '</tr>';
+
+ if ($folder->get_parent($cache)) {
+ $html .= '<tr>';
+ $html .= '<td class="fb-i"><img src="' . $fallback_images_href . 'folder-parent.png" alt="folder-parent"/></td>';
+ $html .= '<td class="fb-n"><a href="..">Parent Directory</a></td>';
+ $html .= '<td class="fb-d"></td>';
+ $html .= '<td class="fb-s"></td>';
+ $html .= '</tr>';
+ }
+
+ foreach ($items as $item) {
+ $type = $item->is_folder ? 'folder' : 'file';
+
+ $html .= '<tr>';
+ $html .= '<td class="fb-i"><img src="' . $fallback_images_href . $type . '.png" alt="' . $type . '"/></td>';
+ $html .= '<td class="fb-n"><a href="' . $item->href . '">' . basename($item->path) . '</a></td>';
+ $html .= '<td class="fb-d">' . date('Y-m-d H:i', $item->date) . '</td>';
+ $html .= '<td class="fb-s">' . ($item->size !== null ? intval($item->size / 1000) . ' KB' : '' ) . '</td>';
+ $html .= '</tr>';
+ }
+
+ $html .= '</table>';
+
+ return $html;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php
new file mode 100755
index 0000000..477f9e2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php
@@ -0,0 +1,96 @@
+<?php
+
+class Filesize {
+ private static $cache = [];
+
+ public static function getSize($path, $withFoldersize, $withDu) {
+ $fs = new Filesize();
+ return $fs->size($path, $withFoldersize, $withDu);
+ }
+
+ public static function getCachedSize($path, $withFoldersize, $withDu) {
+ if (array_key_exists($path, Filesize::$cache)) {
+ return Filesize::$cache[$path];
+ }
+
+ $size = Filesize::getSize($path, $withFoldersize, $withDu);
+
+ Filesize::$cache[$path] = $size;
+ return $size;
+ }
+
+
+ private function __construct() {}
+
+ private function read_dir($path) {
+ $paths = [];
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if ($name !== '.' && $name !== '..') {
+ $paths[] = $path . '/' . $name;
+ }
+ }
+ }
+ return $paths;
+ }
+
+ private function php_filesize($path, $recursive = false) {
+ // if (PHP_INT_SIZE < 8) {
+ // }
+ $size = @filesize($path);
+
+ if (!is_dir($path) || !$recursive) {
+ return $size;
+ }
+
+ foreach ($this->read_dir($path) as $p) {
+ $size += $this->php_filesize($p, true);
+ }
+ return $size;
+ }
+
+
+ private function exec($cmdv) {
+ $cmd = implode(' ', array_map('escapeshellarg', $cmdv));
+ $lines = [];
+ $rc = null;
+ exec($cmd, $lines, $rc);
+ return $lines;
+ }
+
+ private function exec_du_all($paths) {
+ $cmdv = array_merge(['du', '-sbL'], $paths);
+ $lines = $this->exec($cmdv);
+
+ $sizes = [];
+ foreach ($lines as $line) {
+ $parts = preg_split('/[\s]+/', $line, 2);
+ $size = intval($parts[0], 10);
+ $path = $parts[1];
+ $sizes[$path] = $size;
+ }
+ return $sizes;
+ }
+
+ private function exec_du($path) {
+ $sizes = $this->exec_du_all([$path]);
+ return $sizes[$path];
+ }
+
+
+ private function size($path, $withFoldersize = false, $withDu = false) {
+ if (is_file($path)) {
+ return $this->php_filesize($path);
+ }
+
+ if (is_dir($path) && $withFoldersize) {
+ if ($withDu) {
+ return $this->exec_du($path);
+ }
+
+ return $this->php_filesize($path, true);
+ }
+
+ return null;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php
new file mode 100755
index 0000000..2b9ce34
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php
@@ -0,0 +1,91 @@
+<?php
+
+class Item {
+ public static function cmp($item1, $item2) {
+ if ($item1->is_folder && !$item2->is_folder) {
+ return -1;
+ }
+ if (!$item1->is_folder && $item2->is_folder) {
+ return 1;
+ }
+
+ return strcasecmp($item1->path, $item2->path);
+ }
+
+ public static function get($context, $path, &$cache) {
+ if (!Util::starts_with($path, $context->get_setup()->get('ROOT_PATH'))) {
+ return null;
+ }
+
+ if (is_array($cache) && array_key_exists($path, $cache)) {
+ return $cache[$path];
+ }
+
+ $item = new Item($context, $path);
+
+ if (is_array($cache)) {
+ $cache[$path] = $item;
+ }
+ return $item;
+ }
+
+ public $context;
+ public $path;
+ public $href;
+ public $date;
+ public $size;
+ public $is_folder;
+ public $is_content_fetched;
+
+ private function __construct($context, $path) {
+ $this->context = $context;
+
+ $this->path = Util::normalize_path($path, false);
+ $this->is_folder = is_dir($this->path);
+ $this->href = $context->to_href($this->path, $this->is_folder);
+ $this->date = @filemtime($this->path);
+ $this->size = Util::filesize($context, $this->path);
+ $this->is_content_fetched = false;
+ }
+
+ public function to_json_object() {
+ $obj = [
+ 'href' => $this->href,
+ 'time' => $this->date * 1000, // seconds (PHP) to milliseconds (JavaScript)
+ 'size' => $this->size
+ ];
+
+ if ($this->is_folder) {
+ $obj['managed'] = $this->context->is_managed_href($this->href);
+ $obj['fetched'] = $this->is_content_fetched;
+ }
+
+ return $obj;
+ }
+
+ public function get_parent(&$cache) {
+ $parent_path = Util::normalize_path(dirname($this->path), false);
+ if ($parent_path !== $this->path && Util::starts_with($parent_path, $this->context->get_setup()->get('ROOT_PATH'))) {
+ return Item::get($this->context, $parent_path, $cache);
+ }
+ return null;
+ }
+
+ public function get_content(&$cache) {
+ $items = [];
+
+ if (!$this->context->is_managed_href($this->href)) {
+ return $items;
+ }
+
+ $files = $this->context->read_dir($this->path);
+ foreach ($files as $file) {
+ $item = Item::get($this->context, $this->path . '/' . $file, $cache);
+ $items[$item->path] = $item;
+ }
+
+ $this->is_content_fetched = true;
+
+ return $items;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php
new file mode 100755
index 0000000..f662b9f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php
@@ -0,0 +1,65 @@
+<?php
+
+class Json {
+ const SINGLE = 1;
+ const MULTI = 2;
+
+ public static function load($path) {
+ if (!is_readable($path)) {
+ return [];
+ }
+
+ $json = file_get_contents($path);
+ return Json::decode($json);
+ }
+
+ public static function save($path, $obj) {
+ $json = json_encode($obj);
+ return file_put_contents($path, $json) !== false;
+ }
+
+ private static function decode($json) {
+ $json = Json::strip($json);
+ return json_decode($json, true);
+ }
+
+ private static function strip($commented_json) {
+ $insideString = false;
+ $insideComment = false;
+ $json = '';
+
+ for ($i = 0, $len = strlen($commented_json); $i < $len; $i += 1) {
+ $char = $commented_json[$i];
+ $charchar = $char . @$commented_json[$i + 1];
+ $prevChar = @$commented_json[$i - 1];
+
+ if (!$insideComment && $char === '"' && $prevChar !== "\\") {
+ $insideString = !$insideString;
+ }
+
+ if ($insideString) {
+ $json .= $char;
+ } elseif (!$insideComment && $charchar === '//') {
+ $insideComment = Json::SINGLE;
+ $i += 1;
+ } elseif (!$insideComment && $charchar === '/*') {
+ $insideComment = Json::MULTI;
+ $i += 1;
+ } elseif (!$insideComment) {
+ $json .= $char;
+ } elseif ($insideComment === Json::SINGLE && $charchar === "\r\n") {
+ $insideComment = false;
+ $json .= $charchar;
+ $i += 1;
+ } elseif ($insideComment === Json::SINGLE && $char === "\n") {
+ $insideComment = false;
+ $json .= $char;
+ } elseif ($insideComment === Json::MULTI && $charchar === '*/') {
+ $insideComment = false;
+ $i += 1;
+ }
+ }
+
+ return $json;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php
new file mode 100755
index 0000000..504bb3c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php
@@ -0,0 +1,28 @@
+<?php
+
+class Logger {
+ private static $start;
+ private static $prev;
+
+ private static function time() {
+ return microtime(true) * 1000; // sec * 1000 = ms
+ }
+
+ public static function init() {
+ self::$start = self::time();
+ self::$prev = self::$start;
+ register_shutdown_function(function () { Logger::log('shutdown'); });
+ Logger::log('--------------------------------');
+ }
+
+ public static function log($message=null, $obj=null) {
+ $now = self::time();
+ $message = number_format($now - self::$start, 3) . ' ' . number_format($now - self::$prev, 3) . ' ' . $message;
+
+ @error_log($message . ' ' . var_export($obj, true));
+
+ self::$prev = $now;
+ }
+}
+
+Logger::init();
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php
new file mode 100755
index 0000000..95bae09
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php
@@ -0,0 +1,38 @@
+<?php
+
+class Request {
+ private $params;
+
+ public function __construct($params, $body) {
+ $data = json_decode($body, true);
+ $this->params = $data !== null ? $data : $params;
+ }
+
+ public function query($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = Util::array_query($this->params, $keypath, Util::NO_DEFAULT);
+
+ if ($value === Util::NO_DEFAULT) {
+ Util::json_fail(Util::ERR_MISSING_PARAM, 'parameter \'' . $keypath . '\' is missing', $default === Util::NO_DEFAULT);
+ return $default;
+ }
+
+ return $value;
+ }
+
+ public function query_boolean($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $this->query($keypath, $default);
+ return filter_var($value, FILTER_VALIDATE_BOOLEAN);
+ }
+
+ public function query_numeric($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $this->query($keypath, $default);
+ Util::json_fail(Util::ERR_ILLIGAL_PARAM, 'parameter \'' . $keypath . '\' is not numeric', !is_numeric($value));
+ return intval($value, 10);
+ }
+
+ public function query_array($keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $this->query($keypath, $default);
+ Util::json_fail(Util::ERR_ILLIGAL_PARAM, 'parameter \'' . $keypath . '\' is no array', !is_array($value));
+ return $value;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php
new file mode 100755
index 0000000..630d78f
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php
@@ -0,0 +1,20 @@
+<?php
+
+class Session {
+ private static $KEY_PREFIX = '__H5AI__';
+ private $store;
+
+ public function __construct(&$store) {
+ $this->store = &$store;
+ }
+
+ public function set($key, $value) {
+ $key = Session::$KEY_PREFIX . $key;
+ $this->store[$key] = $value;
+ }
+
+ public function get($key, $default = null) {
+ $key = Session::$KEY_PREFIX . $key;
+ return array_key_exists($key, $this->store) ? $this->store[$key] : $default;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php
new file mode 100755
index 0000000..d0c3fb2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php
@@ -0,0 +1,185 @@
+<?php
+
+class Setup {
+ private $store;
+ private $refresh;
+
+ public function __construct($refresh = false) {
+ $this->store = [];
+ $this->refresh = $refresh;
+
+ $this->add_globals_and_envs();
+ $this->add_php_checks();
+ $this->add_app_metadata();
+ $this->add_server_metadata_and_check();
+ $this->add_paths();
+ $this->add_sys_cmd_checks();
+ }
+
+ private function set($key, $value) {
+ if (array_key_exists($key, $this->store)) {
+ Logger::log('setup key already taken', [
+ 'key' => $key,
+ 'value' => $value,
+ 'found' => $this->store[$key]
+ ]);
+ exit;
+ }
+ if (!is_string($value) && !is_bool($value)) {
+ Logger::log('setup value neither string nor boolean', [
+ 'key' => $key,
+ 'value' => $value
+ ]);
+ exit;
+ }
+
+ $this->store[$key] = $value;
+ }
+
+ public function get($key) {
+ if (!array_key_exists($key, $this->store)) {
+ Logger::log('setup key not found', ['key' => $key]);
+ exit;
+ }
+
+ return $this->store[$key];
+ }
+
+ private function add_globals_and_envs() {
+ $this->set('PHP_VERSION', PHP_VERSION);
+ $this->set('MIN_PHP_VERSION', MIN_PHP_VERSION);
+ $this->set('PHP_ARCH', (PHP_INT_SIZE * 8) . '-bit');
+
+ $this->set('REQUEST_METHOD', $_SERVER['REQUEST_METHOD']);
+ $this->set('REQUEST_HREF', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
+ $this->set('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
+ $this->set('SERVER_SOFTWARE', $_SERVER['SERVER_SOFTWARE']);
+ $this->set('HTTP_USER_AGENT', $_SERVER['HTTP_USER_AGENT']);
+ }
+
+ private function add_php_checks() {
+ $this->set('HAS_PHP_EXIF', function_exists('exif_thumbnail'));
+
+ $has_php_jpeg = false;
+ if (function_exists('gd_info')) {
+ $infos = gd_info();
+ $has_php_jpeg = array_key_exists('JPEG Support', $infos) && $infos['JPEG Support'];
+ }
+ $this->set('HAS_PHP_JPEG', $has_php_jpeg);
+ }
+
+ private function add_app_metadata() {
+ $this->set('NAME', 'h5ai');
+ $this->set('VERSION', H5AI_VERSION);
+ $this->set('FILE_PREFIX', '_h5ai');
+ }
+
+ private function add_server_metadata_and_check() {
+ $server_software = $this->get('SERVER_SOFTWARE');
+ $server_name = null;
+ $server_version = null;
+
+ if ($server_software && preg_match('#^(.*?)(?:/(.*?))?(?: |$)#', strtolower($server_software), $matches)) {
+ $server_name = $matches[1];
+ $server_version = count($matches) > 2 ? $matches[2] : '';
+ }
+
+ $this->set('SERVER_NAME', $server_name);
+ $this->set('SERVER_VERSION', $server_version);
+ $this->set('HAS_SERVER', in_array($server_name, ['apache', 'lighttpd', 'nginx', 'cherokee']));
+ }
+
+ private function add_paths() {
+ $script_name = $this->get('SCRIPT_NAME');
+ if ($this->get('SERVER_NAME') === 'lighttpd') {
+ $script_name = preg_replace('#^.*?//#', '/', $script_name);
+ }
+
+ $this->set('H5AI_HREF', Util::normalize_path(dirname(dirname($script_name)), true));
+ $this->set('H5AI_PATH', Util::normalize_path(dirname(dirname(dirname(dirname(__FILE__)))), false));
+
+ $this->set('ROOT_HREF', Util::normalize_path(dirname($this->get('H5AI_HREF')), true));
+ $this->set('ROOT_PATH', Util::normalize_path(dirname($this->get('H5AI_PATH')), false));
+
+ $this->set('PUBLIC_HREF', Util::normalize_path($this->get('H5AI_HREF') . '/public/', true));
+ $this->set('PUBLIC_PATH', Util::normalize_path($this->get('H5AI_PATH') . '/public/', false));
+
+ $this->set('INDEX_HREF', Util::normalize_path($this->get('PUBLIC_HREF') . '/index.php', false));
+ $this->set('CACHE_PUB_HREF', Util::normalize_path($this->get('PUBLIC_HREF') . '/cache', true));
+ $this->set('CACHE_PUB_PATH', Util::normalize_path($this->get('PUBLIC_PATH') . '/cache', false));
+ $this->set('HAS_WRITABLE_CACHE_PUB', @is_writable($this->get('CACHE_PUB_PATH')));
+
+ $this->set('PRIVATE_PATH', Util::normalize_path($this->get('H5AI_PATH') . '/private', false));
+ $this->set('CONF_PATH', Util::normalize_path($this->get('PRIVATE_PATH') . '/conf', false));
+ $this->set('CACHE_PRV_PATH', Util::normalize_path($this->get('PRIVATE_PATH') . '/cache', false));
+ $this->set('HAS_WRITABLE_CACHE_PRV', @is_writable($this->get('CACHE_PRV_PATH')));
+ }
+
+ private function add_sys_cmd_checks() {
+ $cmds_cache_path = Util::normalize_path($this->get('CACHE_PRV_PATH') . '/cmds.json', false);
+
+ $cmds = Json::load($cmds_cache_path);
+ if (sizeof($cmds) === 0 || $this->refresh) {
+ $cmds['command'] = Util::exec_0('command -v command');
+ $cmds['which'] = Util::exec_0('which which') || Util::exec_0('which which.exe');
+
+ $cmd = false;
+ if ($cmds['command']) {
+ $cmd = 'command -v';
+ } elseif ($cmds['which']) {
+ $cmd = 'which';
+ }
+
+ foreach (['avconv', 'convert', 'du', 'ffmpeg', 'gm', 'tar', 'zip'] as $c) {
+ $cmds[$c] = ($cmd !== false) && (Util::exec_0($cmd . ' ' . $c) || Util::exec_0($cmd . ' ' . $c . '.exe'));
+ }
+
+ Json::save($cmds_cache_path, $cmds);
+ }
+ foreach ($cmds as $c => $has) {
+ $this->set('HAS_CMD_' . strtoupper($c), $has);
+ }
+ }
+
+ public function to_jsono($as_admin = false) {
+ $keys = [
+ 'PUBLIC_HREF',
+ 'ROOT_HREF'
+ ];
+
+ if ($as_admin) {
+ $keys = array_merge($keys, [
+ 'VERSION',
+
+ 'PHP_VERSION',
+ 'MIN_PHP_VERSION',
+ 'PHP_ARCH',
+ 'HAS_PHP_EXIF',
+ 'HAS_PHP_JPEG',
+
+ 'SERVER_NAME',
+ 'SERVER_VERSION',
+ 'HAS_SERVER',
+
+ 'INDEX_HREF',
+
+ 'HAS_WRITABLE_CACHE_PUB',
+ 'HAS_WRITABLE_CACHE_PRV',
+
+ 'HAS_CMD_AVCONV',
+ 'HAS_CMD_CONVERT',
+ 'HAS_CMD_DU',
+ 'HAS_CMD_FFMPEG',
+ 'HAS_CMD_GM',
+ 'HAS_CMD_TAR',
+ 'HAS_CMD_ZIP'
+ ]);
+ }
+
+ $jsono = ['AS_ADMIN' => $as_admin];
+ foreach ($keys as $key) {
+ $jsono[$key] = $this->get($key);
+ }
+ return $jsono;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php
new file mode 100755
index 0000000..8fcaddd
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php
@@ -0,0 +1,32 @@
+<?php
+
+class Theme {
+ private static $EXTENSIONS = ['svg', 'png', 'jpg'];
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function get_icons() {
+ $public_path = $this->context->get_setup()->get('PUBLIC_PATH');
+ $theme = $this->context->query_option('view.theme', '-NONE-');
+ $theme_path = $public_path . '/images/themes/' . $theme;
+
+ $icons = [];
+
+ if (is_dir($theme_path)) {
+ if ($dir = opendir($theme_path)) {
+ while (($name = readdir($dir)) !== false) {
+ $path_parts = pathinfo($name);
+ if (in_array(@$path_parts['extension'], Theme::$EXTENSIONS)) {
+ $icons[$path_parts['filename']] = $theme . '/' . $name;
+ }
+ }
+ closedir($dir);
+ }
+ }
+
+ return $icons;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php
new file mode 100755
index 0000000..ce6c802
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php
@@ -0,0 +1,89 @@
+<?php
+
+class Util {
+ const ERR_MISSING_PARAM = 'ERR_MISSING_PARAM';
+ const ERR_ILLIGAL_PARAM = 'ERR_ILLIGAL_PARAM';
+ const ERR_FAILED = 'ERR_FAILED';
+ const ERR_DISABLED = 'ERR_DISABLED';
+ const ERR_UNSUPPORTED = 'ERR_UNSUPPORTED';
+ const NO_DEFAULT = 'NO_*@+#?!_DEFAULT';
+ const RE_DELIMITER = '@';
+
+ public static function normalize_path($path, $trailing_slash = false) {
+ $path = preg_replace('#[\\\\/]+#', '/', $path);
+ return preg_match('#^(\w:)?/$#', $path) ? $path : (rtrim($path, '/') . ($trailing_slash ? '/' : ''));
+ }
+
+ public static function json_exit($obj = []) {
+ header('Content-type: application/json;charset=utf-8');
+ echo json_encode($obj);
+ exit;
+ }
+
+ public static function json_fail($err, $msg = '', $cond = true) {
+ if ($cond) {
+ Util::json_exit(['err' => $err, 'msg' => $msg]);
+ }
+ }
+
+ public static function array_query($array, $keypath = '', $default = Util::NO_DEFAULT) {
+ $value = $array;
+
+ $keys = array_filter(explode('.', $keypath));
+ foreach ($keys as $key) {
+ if (!is_array($value) || !array_key_exists($key, $value)) {
+ return $default;
+ }
+ $value = $value[$key];
+ }
+
+ return $value;
+ }
+
+ public static function starts_with($sequence, $head) {
+ return substr($sequence, 0, strlen($head)) === $head;
+ }
+
+ public static function ends_with($sequence, $tail) {
+ $len = strlen($tail);
+ return $len === 0 ? true : substr($sequence, -$len) === $tail;
+ }
+
+ public static function wrap_pattern($pattern) {
+ return Util::RE_DELIMITER . str_replace(Util::RE_DELIMITER, '\\' . Util::RE_DELIMITER, $pattern) . Util::RE_DELIMITER;
+ }
+
+ public static function passthru_cmd($cmd) {
+ $rc = null;
+ passthru($cmd, $rc);
+ return $rc;
+ }
+
+ public static function exec_cmdv($cmdv) {
+ if (!is_array($cmdv)) {
+ $cmdv = func_get_args();
+ }
+ $cmd = implode(' ', array_map('escapeshellarg', $cmdv));
+
+ $lines = [];
+ $rc = null;
+ exec($cmd, $lines, $rc);
+ return implode("\n", $lines);
+ }
+
+ public static function exec_0($cmd) {
+ $lines = [];
+ $rc = null;
+ try {
+ @exec($cmd, $lines, $rc);
+ return $rc === 0;
+ } catch (Exception $e) {}
+ return false;
+ }
+
+ public static function filesize($context, $path) {
+ $withFoldersize = $context->query_option('foldersize.enabled', false);
+ $withDu = $context->get_setup()->get('HAS_CMD_DU') && $context->query_option('foldersize.type', null) === 'shell-du';
+ return Filesize::getCachedSize($path, $withFoldersize, $withDu);
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php
new file mode 100755
index 0000000..fec07de
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php
@@ -0,0 +1,183 @@
+<?php
+
+class Archive {
+ const NULL_BYTE = "\0";
+
+ private static $SEGMENT_SIZE = 16777216; // 1024 * 1024 * 16 = 16MiB
+ private static $TAR_PASSTHRU_CMD = 'cd [ROOTDIR] && tar --no-recursion -c -- [DIRS] [FILES]';
+ private static $ZIP_PASSTHRU_CMD = 'cd [ROOTDIR] && zip - -- [FILES]';
+
+ private $context;
+ private $base_path;
+ private $dirs;
+ private $files;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function output($type, $base_href, $hrefs) {
+ $this->base_path = $this->context->to_path($base_href);
+ if (!$this->context->is_managed_path($this->base_path)) {
+ return false;
+ }
+
+ $this->dirs = [];
+ $this->files = [];
+
+ $this->add_hrefs($hrefs);
+
+ if (count($this->dirs) === 0 && count($this->files) === 0) {
+ if ($type === 'php-tar') {
+ $this->add_dir($this->base_path, '/');
+ } else {
+ $this->add_dir($this->base_path, '.');
+ }
+ }
+
+ if ($type === 'php-tar') {
+ return $this->php_tar($this->dirs, $this->files);
+ } elseif ($type === 'shell-tar') {
+ return $this->shell_cmd(Archive::$TAR_PASSTHRU_CMD);
+ } elseif ($type === 'shell-zip') {
+ return $this->shell_cmd(Archive::$ZIP_PASSTHRU_CMD);
+ }
+ return false;
+ }
+
+ private function shell_cmd($cmd) {
+ $cmd = str_replace('[ROOTDIR]', escapeshellarg($this->base_path), $cmd);
+ $cmd = str_replace('[DIRS]', count($this->dirs) ? implode(' ', array_map('escapeshellarg', $this->dirs)) : '', $cmd);
+ $cmd = str_replace('[FILES]', count($this->files) ? implode(' ', array_map('escapeshellarg', $this->files)) : '', $cmd);
+ try {
+ Util::passthru_cmd($cmd);
+ } catch (Exeption $err) {
+ return false;
+ }
+ return true;
+ }
+
+ private function php_tar($dirs, $files) {
+ $filesizes = [];
+ $total_size = 512 * count($dirs);
+ foreach (array_keys($files) as $real_file) {
+ $size = filesize($real_file);
+
+ $filesizes[$real_file] = $size;
+ $total_size += 512 + $size;
+ if ($size % 512 != 0) {
+ $total_size += 512 - ($size % 512);
+ }
+ }
+
+ header('Content-Length: ' . $total_size);
+
+ foreach ($dirs as $real_dir => $archived_dir) {
+ echo $this->php_tar_header($archived_dir, 0, @filemtime($real_dir . DIRECTORY_SEPARATOR . '.'), 5);
+ }
+
+ foreach ($files as $real_file => $archived_file) {
+ $size = $filesizes[$real_file];
+
+ echo $this->php_tar_header($archived_file, $size, @filemtime($real_file), 0);
+ $this->print_file($real_file);
+
+ if ($size % 512 != 0) {
+ echo str_repeat(Archive::NULL_BYTE, 512 - ($size % 512));
+ }
+ }
+
+ return true;
+ }
+
+ private function php_tar_header($filename, $size, $mtime, $type) {
+ $name = substr(basename($filename), -99);
+ $prefix = substr(Util::normalize_path(dirname($filename)), -154);
+ if ($prefix === '.') {
+ $prefix = '';
+ }
+
+ $header =
+ str_pad($name, 100, Archive::NULL_BYTE) // filename [100]
+ . '0000755' . Archive::NULL_BYTE // file mode [8]
+ . '0000000' . Archive::NULL_BYTE // uid [8]
+ . '0000000' . Archive::NULL_BYTE // gid [8]
+ . str_pad(decoct($size), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file size [12]
+ . str_pad(decoct($mtime), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file modification time [12]
+ . ' ' // checksum [8]
+ . str_pad($type, 1) // file type [1]
+ . str_repeat(Archive::NULL_BYTE, 100) // linkname [100]
+ . 'ustar' . Archive::NULL_BYTE // magic [6]
+ . '00' // version [2]
+ . str_repeat(Archive::NULL_BYTE, 80) // uname, gname, defmajor, devminor [32 + 32 + 8 + 8]
+ . str_pad($prefix, 155, Archive::NULL_BYTE) // filename [155]
+ . str_repeat(Archive::NULL_BYTE, 12); // fill [12]
+ assert(strlen($header) === 512);
+
+ // checksum
+ $checksum = array_sum(array_map('ord', str_split($header)));
+ $checksum = str_pad(decoct($checksum), 6, '0', STR_PAD_LEFT) . Archive::NULL_BYTE . ' ';
+ $header = substr_replace($header, $checksum, 148, 8);
+
+ return $header;
+ }
+
+ private function print_file($file) {
+ // Send file content in segments to not hit PHP's memory limit (default: 128M)
+ if ($fd = fopen($file, 'rb')) {
+ while (!feof($fd)) {
+ print fread($fd, Archive::$SEGMENT_SIZE);
+ @ob_flush();
+ @flush();
+ }
+ fclose($fd);
+ }
+ }
+
+ private function add_hrefs($hrefs) {
+ foreach ($hrefs as $href) {
+ if (trim($href) === '') {
+ continue;
+ }
+
+ $d = Util::normalize_path(dirname($href), true);
+ $n = basename($href);
+
+ if ($this->context->is_managed_href($d) && !$this->context->is_hidden($n)) {
+
+ $real_file = $this->context->to_path($href);
+ $archived_file = preg_replace('!^' . preg_quote(Util::normalize_path($this->base_path, true)) . '!', '', $real_file);
+
+ if (is_dir($real_file)) {
+ $this->add_dir($real_file, $archived_file);
+ } else {
+ $this->add_file($real_file, $archived_file);
+ }
+ }
+ }
+ }
+
+ private function add_file($real_file, $archived_file) {
+ if (is_readable($real_file)) {
+ $this->files[$real_file] = $archived_file;
+ }
+ }
+
+ private function add_dir($real_dir, $archived_dir) {
+ if ($this->context->is_managed_path($real_dir)) {
+ $this->dirs[$real_dir] = $archived_dir;
+
+ $files = $this->context->read_dir($real_dir);
+ foreach ($files as $file) {
+ $real_file = $real_dir . '/' . $file;
+ $archived_file = $archived_dir . '/' . $file;
+
+ if (is_dir($real_file)) {
+ $this->add_dir($real_file, $archived_file);
+ } else {
+ $this->add_file($real_file, $archived_file);
+ }
+ }
+ }
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php
new file mode 100755
index 0000000..ab1628e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php
@@ -0,0 +1,65 @@
+<?php
+
+class Custom {
+ private static $EXTENSIONS = ['html', 'md'];
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ private function read_custom_file($path, $name, &$content, &$type) {
+ $file_prefix = $this->context->get_setup()->get('FILE_PREFIX');
+
+ foreach (Custom::$EXTENSIONS as $ext) {
+ $file = $path . '/' . $file_prefix . '.' . $name . '.' . $ext;
+ if (is_readable($file)) {
+ $content = file_get_contents($file);
+ $type = $ext;
+ return;
+ }
+ }
+ }
+
+ public function get_customizations($href) {
+ if (!$this->context->query_option('custom.enabled', false)) {
+ return [
+ 'header' => ['content' => null, 'type' => null],
+ 'footer' => ['content' => null, 'type' => null]
+ ];
+ }
+
+ $root_path = $this->context->get_setup()->get('FILE_PREFIX');
+ $path = $this->context->to_path($href);
+
+ $header = null;
+ $header_type = null;
+ $footer = null;
+ $footer_type = null;
+
+ $this->read_custom_file($path, 'header', $header, $header_type);
+ $this->read_custom_file($path, 'footer', $footer, $footer_type);
+
+ while ($header === null || $footer === null) {
+ if ($header === null) {
+ $this->read_custom_file($path, 'headers', $header, $header_type);
+ }
+ if ($footer === null) {
+ $this->read_custom_file($path, 'footers', $footer, $footer_type);
+ }
+ if ($path === $root_path) {
+ break;
+ }
+ $parent_path = Util::normalize_path(dirname($path));
+ if ($parent_path === $path) {
+ break;
+ }
+ $path = $parent_path;
+ }
+
+ return [
+ 'header' => ['content' => $header, 'type' => $header_type],
+ 'footer' => ['content' => $footer, 'type' => $footer_type]
+ ];
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php
new file mode 100755
index 0000000..124954d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php
@@ -0,0 +1,40 @@
+<?php
+
+class Search {
+ private $context;
+
+ public function __construct($context) {
+ $this->context = $context;
+ }
+
+ public function get_paths($root, $pattern = null, $ignorecase = false) {
+ $paths = [];
+ if ($pattern && $this->context->is_managed_path($root)) {
+ $re = Util::wrap_pattern($pattern);
+ if ($ignorecase) {
+ $re .= 'i';
+ }
+ $names = $this->context->read_dir($root);
+ foreach ($names as $name) {
+ $path = $root . '/' . $name;
+ if (preg_match($re, @basename($path))) {
+ $paths[] = $path;
+ }
+ if (@is_dir($path)) {
+ $paths = array_merge($paths, $this->get_paths($path, $pattern, $ignorecase));
+ }
+ }
+ }
+ return $paths;
+ }
+
+ public function get_items($href, $pattern = null, $ignorecase = false) {
+ $cache = [];
+ $root = $this->context->to_path($href);
+ $paths = $this->get_paths($root, $pattern, $ignorecase);
+ $items = array_map(function ($path) {
+ return Item::get($this->context, $path, $cache)->to_json_object();
+ }, $paths);
+ return $items;
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php
new file mode 100755
index 0000000..d52d3e8
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php
@@ -0,0 +1,253 @@
+<?php
+
+class Thumb {
+ private static $FFMPEG_CMDV = ['ffmpeg', '-ss', '0:00:10', '-i', '[SRC]', '-an', '-vframes', '1', '[DEST]'];
+ private static $AVCONV_CMDV = ['avconv', '-ss', '0:00:10', '-i', '[SRC]', '-an', '-vframes', '1', '[DEST]'];
+ private static $CONVERT_CMDV = ['convert', '-density', '200', '-quality', '100', '-strip', '[SRC][0]', '[DEST]'];
+ private static $GM_CONVERT_CMDV = ['gm', 'convert', '-density', '200', '-quality', '100', '[SRC][0]', '[DEST]'];
+ private static $THUMB_CACHE = 'thumbs';
+
+ private $context;
+ private $setup;
+ private $thumbs_path;
+ private $thumbs_href;
+
+ public function __construct($context) {
+ $this->context = $context;
+ $this->setup = $context->get_setup();
+ $this->thumbs_path = $this->setup->get('CACHE_PUB_PATH') . '/' . Thumb::$THUMB_CACHE;
+ $this->thumbs_href = $this->setup->get('CACHE_PUB_HREF') . Thumb::$THUMB_CACHE;
+
+ if (!is_dir($this->thumbs_path)) {
+ @mkdir($this->thumbs_path, 0755, true);
+ }
+ }
+
+ public function thumb($type, $source_href, $width, $height) {
+ $source_path = $this->context->to_path($source_href);
+ if (!file_exists($source_path) || Util::starts_with($source_path, $this->setup->get('CACHE_PUB_PATH'))) {
+ return null;
+ }
+
+ $capture_path = $source_path;
+ if ($type === 'img') {
+ $capture_path = $source_path;
+ } elseif ($type === 'mov') {
+ if ($this->setup->get('HAS_CMD_AVCONV')) {
+ $capture_path = $this->capture(Thumb::$AVCONV_CMDV, $source_path);
+ } elseif ($this->setup->get('HAS_CMD_FFMPEG')) {
+ $capture_path = $this->capture(Thumb::$FFMPEG_CMDV, $source_path);
+ }
+ } elseif ($type === 'doc') {
+ if ($this->setup->get('HAS_CMD_CONVERT')) {
+ $capture_path = $this->capture(Thumb::$CONVERT_CMDV, $source_path);
+ } elseif ($this->setup->get('HAS_CMD_GM')) {
+ $capture_path = $this->capture(Thumb::$GM_CONVERT_CMDV, $source_path);
+ }
+ }
+
+ return $this->thumb_href($capture_path, $width, $height);
+ }
+
+ private function thumb_href($source_path, $width, $height) {
+ if (!file_exists($source_path)) {
+ return null;
+ }
+
+ $name = 'thumb-' . sha1($source_path) . '-' . $width . 'x' . $height . '.jpg';
+ $thumb_path = $this->thumbs_path . '/' . $name;
+ $thumb_href = $this->thumbs_href . '/' . $name;
+
+ if (!file_exists($thumb_path) || filemtime($source_path) >= filemtime($thumb_path)) {
+ $image = new Image();
+
+ $et = false;
+ if ($this->setup->get('HAS_PHP_EXIF') && $this->context->query_option('thumbnails.exif', false) === true && $height != 0) {
+ $et = @exif_thumbnail($source_path);
+ }
+ if($et !== false) {
+ file_put_contents($thumb_path, $et);
+ $image->set_source($thumb_path);
+ $image->normalize_exif_orientation($source_path);
+ } else {
+ $image->set_source($source_path);
+ }
+
+ $image->thumb($width, $height);
+ $image->save_dest_jpeg($thumb_path, 80);
+ }
+
+ return file_exists($thumb_path) ? $thumb_href : null;
+ }
+
+ private function capture($cmdv, $source_path) {
+ if (!file_exists($source_path)) {
+ return null;
+ }
+
+ $capture_path = $this->thumbs_path . '/capture-' . sha1($source_path) . '.jpg';
+
+ if (!file_exists($capture_path) || filemtime($source_path) >= filemtime($capture_path)) {
+ foreach ($cmdv as &$arg) {
+ $arg = str_replace('[SRC]', $source_path, $arg);
+ $arg = str_replace('[DEST]', $capture_path, $arg);
+ }
+
+ Util::exec_cmdv($cmdv);
+ }
+
+ return file_exists($capture_path) ? $capture_path : null;
+ }
+}
+
+class Image {
+ private $source_file;
+ private $source;
+ private $width;
+ private $height;
+ private $type;
+ private $dest;
+
+ public function __construct($filename = null) {
+ $this->source_file = null;
+ $this->source = null;
+ $this->width = null;
+ $this->height = null;
+ $this->type = null;
+
+ $this->dest = null;
+
+ $this->set_source($filename);
+ }
+
+ public function __destruct() {
+ $this->release_source();
+ $this->release_dest();
+ }
+
+ public function set_source($filename) {
+ $this->release_source();
+ $this->release_dest();
+
+ if (is_null($filename)) {
+ return;
+ }
+
+ $this->source_file = $filename;
+
+ list($this->width, $this->height, $this->type) = @getimagesize($this->source_file);
+
+ if (!$this->width || !$this->height) {
+ $this->source_file = null;
+ $this->width = null;
+ $this->height = null;
+ $this->type = null;
+ return;
+ }
+
+ $this->source = imagecreatefromstring(file_get_contents($this->source_file));
+ }
+
+ public function save_dest_jpeg($filename, $quality = 80) {
+ if (!is_null($this->dest)) {
+ @imagejpeg($this->dest, $filename, $quality);
+ @chmod($filename, 0775);
+ }
+ }
+
+ public function release_dest() {
+ if (!is_null($this->dest)) {
+ @imagedestroy($this->dest);
+ $this->dest = null;
+ }
+ }
+
+ public function release_source() {
+ if (!is_null($this->source)) {
+ @imagedestroy($this->source);
+ $this->source_file = null;
+ $this->source = null;
+ $this->width = null;
+ $this->height = null;
+ $this->type = null;
+ }
+ }
+
+ public function thumb($width, $height) {
+ if (is_null($this->source)) {
+ return;
+ }
+
+ $src_r = 1.0 * $this->width / $this->height;
+
+ if ($height == 0) {
+ if ($src_r >= 1) {
+ $height = 1.0 * $width / $src_r;
+ } else {
+ $height = $width;
+ $width = 1.0 * $height * $src_r;
+ }
+ if ($width > $this->width) {
+ $width = $this->width;
+ $height = $this->height;
+ }
+ }
+
+ $ratio = 1.0 * $width / $height;
+
+ if ($src_r <= $ratio) {
+ $src_w = $this->width;
+ $src_h = $src_w / $ratio;
+ $src_x = 0;
+ } else {
+ $src_h = $this->height;
+ $src_w = $src_h * $ratio;
+ $src_x = 0.5 * ($this->width - $src_w);
+ }
+
+ $width = intval($width);
+ $height = intval($height);
+ $src_x = intval($src_x);
+ $src_w = intval($src_w);
+ $src_h = intval($src_h);
+
+ $this->dest = imagecreatetruecolor($width, $height);
+ $icol = imagecolorallocate($this->dest, 255, 255, 255);
+ imagefill($this->dest, 0, 0, $icol);
+ imagecopyresampled($this->dest, $this->source, 0, 0, $src_x, 0, $width, $height, $src_w, $src_h);
+ }
+
+ public function rotate($angle) {
+ if (is_null($this->source) || ($angle !== 90 && $angle !== 180 && $angle !== 270)) {
+ return;
+ }
+
+ $this->source = imagerotate($this->source, $angle, 0);
+ if ( $angle === 90 || $angle === 270 ) {
+ list($this->width, $this->height) = [$this->height, $this->width];
+ }
+ }
+
+ public function normalize_exif_orientation($exif_source_file = null) {
+ if (is_null($this->source) || !function_exists('exif_read_data')) {
+ return;
+ }
+
+ if ($exif_source_file === null) {
+ $exif_source_file = $this->source_file;
+ }
+
+ $exif = exif_read_data($exif_source_file);
+ switch (@$exif['Orientation']) {
+ case 3:
+ $this->rotate(180);
+ break;
+ case 6:
+ $this->rotate(270);
+ break;
+ case 8:
+ $this->rotate(90);
+ break;
+ }
+ }
+}
diff --git a/container/srv-http/root/srv/_h5ai/private/php/pages/index.php b/container/srv-http/root/srv/_h5ai/private/php/pages/index.php
new file mode 100755
index 0000000..7885a87
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/pages/index.php
@@ -0,0 +1,2 @@
+<?php header('Content-type: text/html;charset=utf-8'); ?><!DOCTYPE html><html class="no-js" lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)</title><meta name="description" content="index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="<?= $public_href; ?>images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="<?= $public_href; ?>images/favicon/favicon-152.png"><link rel="stylesheet" href="<?= $public_href; ?>css/styles.css"><?php if (!$fallback_mode) { ?><script src="<?= $public_href; ?>js/scripts.js" data-module="index"></script><?php } ?>
+<?= $x_head_tags; ?></head><body class="index" id="root"><div id="fallback-hints"><?php if (!$fallback_mode) { ?><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><?php } ?><span class="backlink"><a href="https://larsjung.de/h5ai/" title="h5ai v0.29.2 - Modern HTTP web server index.">powered by h5ai</a></span></div><div id="fallback"><?= $fallback_html; ?></div></body></html><!-- h5ai v0.29.2 - https://larsjung.de/h5ai/ -->
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/private/php/pages/info.php b/container/srv-http/root/srv/_h5ai/private/php/pages/info.php
new file mode 100755
index 0000000..59a8e08
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/private/php/pages/info.php
@@ -0,0 +1,2 @@
+<?php header('Content-type: text/html;charset=utf-8'); ?><!DOCTYPE html><html class="no-js" lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>h5ai info page - v0.29.2</title><meta name="description" content="h5ai info page - v0.29.2"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="<?= $public_href; ?>images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="<?= $public_href; ?>images/favicon/favicon-152.png"><link rel="stylesheet" href="<?= $public_href; ?>css/styles.css"><?php if (!$fallback_mode) { ?><script src="<?= $public_href; ?>js/scripts.js" data-module="info"></script><?php } ?>
+<?= $x_head_tags; ?></head><body class="info" id="root"><div id="fallback-hints"><?php if (!$fallback_mode) { ?><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><?php } ?><span class="backlink"><a href="https://larsjung.de/h5ai/" title="h5ai v0.29.2 - Modern HTTP web server index.">powered by h5ai</a></span></div><div id="content"><h1 id="header"><a href="https://larsjung.de/h5ai/">h5ai</a></h1></div></body></html><!-- h5ai v0.29.2 - https://larsjung.de/h5ai/ -->
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/.htaccess b/container/srv-http/root/srv/_h5ai/public/.htaccess
new file mode 100755
index 0000000..3f14990
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/.htaccess
@@ -0,0 +1,13 @@
+## make this folder accessible
+
+# Apache < 2.3
+<IfModule !mod_authz_core.c>
+ Order allow,deny
+ Allow from all
+ Satisfy All
+</IfModule>
+
+# Apache ≥ 2.3
+<IfModule mod_authz_core.c>
+ Require all granted
+</IfModule>
diff --git a/container/srv-http/root/srv/_h5ai/public/cache/README.md b/container/srv-http/root/srv/_h5ai/public/cache/README.md
new file mode 100755
index 0000000..fd2974c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/cache/README.md
@@ -0,0 +1,9 @@
+# Cache
+
+Public cache.
+
+This directory is used for server side caching. To use caching make this
+directory writable for your webserver.
+
+There is no critical data in here. You can savely remove any content. This
+will clear the cache.
diff --git a/container/srv-http/root/srv/_h5ai/public/css/styles.css b/container/srv-http/root/srv/_h5ai/public/css/styles.css
new file mode 100755
index 0000000..87bf906
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/css/styles.css
@@ -0,0 +1,2 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+@charset "utf-8";/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:0;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}::-moz-selection{color:#fff;background:#ff4081;text-shadow:none}::selection{color:#fff;background:#ff4081;text-shadow:none}*:focus{outline:0}code,pre{font-family:"Ubuntu Mono","Monaco","Lucida Sans Typewriter","monospace";font-size:15px;font-weight:normal;color:rgba(0,0,0,0.87)}audio,canvas,iframe,img,svg,video{vertical-align:middle}textarea{resize:vertical}.hidden{display:none!important}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.raised{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}.popup{box-shadow:0 1px 20px 0 rgba(0,0,0,0.5)}.rounded{border-radius:2px}.clear-appearance{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none}.eased-transition{transition:all .2s ease-in-out}.flex-base{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}.flex-column{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:column}.flex-row{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row}.el-button{border-radius:2px;transition:all .2s ease-in-out;color:#fff;background:#42a5f5;cursor:pointer;text-decoration:none}.el-button:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}.el-input{border-radius:2px;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:#fff;border:0;outline:0;background:#fafafa;border:1px solid rgba(0,0,0,0.05)}#cm-overlay{position:fixed;left:0;top:0;right:0;bottom:0;overflow:hidden;z-index:200}#cm-overlay .cm-panel{box-shadow:0 1px 20px 0 rgba(0,0,0,0.5);border-radius:2px;display:block;position:absolute;left:100px;top:100px;color:rgba(0,0,0,0.87);background:#fff;z-index:10;overflow:auto;min-width:200px}#cm-overlay .cm-panel ul{margin:0;padding:0;list-style:none;text-align:left}#cm-overlay .cm-label{padding:8px 16px;white-space:nowrap;font-weight:bold}#cm-overlay .cm-entry{padding:8px 16px;white-space:nowrap;cursor:pointer}#cm-overlay .cm-entry:hover{color:#42a5f5;background:rgba(0,0,0,0.03)}#cm-overlay .cm-icon{position:relative;top:-2px}#cm-overlay .cm-icon img{width:20px;height:20px}#cm-overlay .cm-icon.no-icon{opacity:0}#cm-overlay .cm-text{margin:0 0 0 12px}#cm-overlay .cm-sep{height:1px;margin:8px 0;padding:0;border-top:1px solid rgba(0,0,0,0.08)}#crumbbar{overflow:hidden;height:48px;font-size:16px;padding:0 8px}#crumbbar a,#crumbbar a:active,#crumbbar a:visited{color:rgba(0,0,0,0.87);cursor:pointer;text-decoration:none}#crumbbar a.active,#crumbbar a:active.active,#crumbbar a:visited.active{font-weight:bold}#crumbbar a:hover,#crumbbar a:active:hover,#crumbbar a:visited:hover{color:#42a5f5}#crumbbar a:focus,#crumbbar a:active:focus,#crumbbar a:visited:focus{outline:0}#crumbbar .crumb{transition:all .2s ease-in-out;display:inline-block}#crumbbar .sep{width:24px;height:24px;padding:12px 0;line-height:48px;display:inline-block;vertical-align:top}#crumbbar .crumb:first-of-type .sep{width:0}#crumbbar .label{line-height:48px;display:inline-block;vertical-align:top;padding:0 8px}#crumbbar .hint{width:20px;height:20px;padding:16px 0 0 0;line-height:48px;display:inline-block;vertical-align:top;position:relative;top:-2px}#content-header,#content-footer{margin:16px;padding:8px;color:rgba(0,0,0,0.87)}#content-header a,#content-footer a,#content-header a:active,#content-footer a:active,#content-header a:visited,#content-footer a:visited{color:#42a5f5;text-decoration:none;cursor:pointer}#content-header a:hover,#content-footer a:hover,#content-header a:active:hover,#content-footer a:active:hover,#content-header a:visited:hover,#content-footer a:visited:hover{color:#212121}#content-header h1,#content-footer h1,#content-header h2,#content-footer h2,#content-header h3,#content-footer h3,#content-header h4,#content-footer h4,#content-header h5,#content-footer h5,#content-header h6,#content-footer h6,#content-header p,#content-footer p{margin:.1em 0}#filter input{display:none;border:0;font-size:16px;color:rgba(0,0,0,0.87);background:transparent;outline:0;width:160px;padding:0 12px 0 4px;line-height:48px;vertical-align:top}#filter.active input{display:inline-block}#filter.pending input{color:rgba(0,0,0,0.26)}#info{overflow:auto;flex:0 0 auto;order:99;padding:32px 32px 32px 48px;white-space:nowrap;overflow-x:hidden;width:240px}#info .icon{width:240px;height:180px}#info .icon img{border-radius:2px;display:block;overflow:hidden;margin:0 auto;width:180px;height:180px}#info .icon .thumb{width:240px}#info .block{border-top:1px solid rgba(0,0,0,0.05);border-bottom:1px solid rgba(0,0,0,0.05);margin:0 0 24px 0;padding:24px 0}#info .label{font-size:16px;margin-bottom:16px}#info .time,#info .size,#info .content{line-height:20px;height:20px}#info .qrcode{margin:0 auto;width:200px}#info .qrcode img{display:block}#pv-content-aud{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%}#pv-content-img{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%;background-color:#f8f8f8;background-image:-webkit-linear-gradient(45deg,#e8e8e8 25%,transparent 25%,transparent 75%,#e8e8e8 75%,#e8e8e8),-webkit-linear-gradient(45deg,#e8e8e8 25%,transparent 25%,transparent 75%,#e8e8e8 75%,#e8e8e8);background-size:60px 60px;background-position:0 0,30px 30px}#pv-content-img.loading{opacity:.5;margin-top:32px;width:240px;height:240px;border-radius:1000px;overflow:hidden}#pv-content-txt{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);box-sizing:border-box;max-width:960px;text-align:left;background:#fff;margin:0 auto;padding:8px;overflow:auto}#pv-content-txt a,#pv-content-txt a:active,#pv-content-txt a:visited{color:#2080ff;text-decoration:none;cursor:pointer}#pv-content-txt a:hover,#pv-content-txt a:active:hover,#pv-content-txt a:visited:hover{color:#68a9ff}pre#pv-content-txt code{line-height:1.2em}div#pv-content-txt{font-size:1.1em;padding:8px 24px}div#pv-content-txt code{color:#008200}#pv-content-vid{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%}#pv-content-vid:-webkit-full-screen{top:auto!important;left:auto!important}#pv-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:100;background:rgba(0,0,0,0.5);transition:background-color .3s ease-in-out;text-align:center}#pv-overlay.fullscreen{background:#212121}#pv-container{position:absolute}#pv-spinner{position:absolute}#pv-spinner .back{width:240px;height:240px;margin:-120px -120px;border-radius:120px;opacity:.5;overflow:hidden}#pv-spinner .spinner{width:100px;height:100px;margin:-50px -50px}#pv-prev-area,#pv-next-area{position:absolute;top:50%;cursor:pointer}#pv-prev-area img,#pv-next-area img{transition:all .2s ease-in-out;display:block;width:48px;height:48px;margin:-36px 0;padding:12px;opacity:.5}#pv-prev-area:hover img,#pv-next-area:hover img{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);opacity:1;background:rgba(27,27,27,0.8)}#pv-prev-area{left:0}#pv-prev-area img{border-radius:0 8px 8px 0;padding-left:48px}#pv-next-area{right:0}#pv-next-area img{border-radius:8px 0 0 8px;padding-right:48px}#pv-buttons{list-style:none;list-style-image:none;margin:0;padding:0}#pv-buttons img{position:relative;width:24px;height:24px;padding:12px}#pv-buttons .bar-label{transition:all .2s ease-in-out;display:block;color:#fff;height:48px;line-height:48px;padding:0 12px;opacity:.7}#pv-buttons .bar-button{transition:all .2s ease-in-out;display:block;line-height:48px;opacity:.7;cursor:pointer}#pv-buttons .bar-button:hover{opacity:1;background:rgba(255,255,255,0.1)}#pv-buttons .bar-left{float:left}#pv-buttons .bar-right{float:right}#pv-bottombar{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:fixed;z-index:5;left:0;right:0;bottom:0;background:#1b1b1b;height:48px}#pv-overlay.fullscreen #pv-bottombar{opacity:.5}@media only screen and (max-width:700px){#pv-prev-area,#pv-next-area{display:none!important}}#search input{display:none;border:0;font-size:16px;color:rgba(0,0,0,0.87);background:transparent;outline:0;width:160px;padding:0 12px 0 4px;line-height:48px;vertical-align:top}#search.active input{display:inline-block}#search.pending input{color:rgba(0,0,0,0.26)}#selection-rect{position:absolute;left:0;top:0;z-index:2;border:1px dashed rgba(0,0,0,0.15);background:rgba(0,0,0,0.1)}html.drag-select,html.drag-select *{cursor:move!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.drag-select #view .item:hover,html.drag-select * #view .item:hover{box-shadow:none!important}#view .selector{display:none;position:absolute;left:0;top:0;width:22px;height:22px;background:#42a5f5;cursor:pointer;border-radius:0 0 2px 0;opacity:.6}#view .selector:hover{opacity:.8}#view .selector img{width:100%;height:100%}#view .item:hover .selector{display:block}#view .item.selected:not(.selecting),#view .item.selecting:not(.selected){color:#fff;background:#42a5f5}#view .item.selected:not(.selecting) .selector,#view .item.selecting:not(.selected) .selector{display:block;opacity:1}#view .item.selected:not(.selecting):hover,#view .item.selecting:not(.selected):hover{color:#fff;background:#42a5f5}#view .no-match{display:none;margin-top:36px;text-align:center;color:rgba(0,0,0,0.05);font-size:5em;font-weight:bold}#tree{overflow:auto;flex:0 0 auto;order:1;padding:32px 32px 32px 16px;white-space:nowrap;max-width:250px;overflow-x:hidden}#tree a,#tree a:active,#tree a.visited{display:block;margin-left:20px;padding:3px 0;text-decoration:none;color:rgba(0,0,0,0.87)}#tree a:hover,#tree a:active:hover,#tree a.visited:hover{color:#42a5f5}#tree .active>a{font-weight:bold}#tree .indicator{display:block;float:left;padding:3px 0;position:relative;top:-2px;cursor:pointer}#tree .indicator img{width:20px;height:20px;zoom:1}#tree .item{clear:left}#tree .item.open>.indicator img{-webkit-transform:rotate(90deg);transform:rotate(90deg)}#tree .item.unknown>.indicator{opacity:.3}#tree .item.none>.indicator{opacity:0;cursor:inherit}#tree .item.unknown>.content,#tree .item.none>.content,#tree .item.closed>.content{display:none}#tree .icon{position:relative;top:-2px}#tree .icon img{width:20px;height:20px}#tree .label{margin:0 0 0 4px}#tree .content{margin:0;padding:0 0 0 20px}#tree .summary{color:rgba(0,0,0,0.26);padding:0 0 0 8px}#root.info #content{flex:1 1 auto;order:50;color:rgba(0,0,0,0.87);text-align:center}#root.info code{margin:0 .2em;padding:2px 4px;border-radius:4px;letter-spacing:.05em;background:#fafafa;border:1px solid rgba(0,0,0,0.05);font-size:.9em}#root.info #header a{transition:all .2s ease-in-out;font-size:4em;font-weight:300;margin:.8em 0 0 0;color:rgba(0,0,0,0.87);text-decoration:none}#root.info #header a:hover{color:#42a5f5}#root.info #support{margin:24px auto;padding:18px 0 6px 0;width:292px;background:#fafafa;border:1px solid rgba(0,0,0,0.05);border-radius:4px}#root.info #support input[type="image"]{border:0;width:100px;padding:12px 48px}#root.info #pass{border-radius:2px;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:#fff;border:0;outline:0;background:#fafafa;border:1px solid rgba(0,0,0,0.05);display:inline-block;margin:8px;padding:0 12px;line-height:28px;width:200px;vertical-align:top}#root.info #login,#root.info #logout{border-radius:2px;transition:all .2s ease-in-out;color:#fff;background:#42a5f5;cursor:pointer;text-decoration:none;display:inline-block;margin:8px;padding:0 12px;line-height:28px;vertical-align:top}#root.info #login:hover,#root.info #logout:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#root.info #hint{margin:12px auto;width:320px}#root.info #tests{display:inline-block;text-align:left;list-style-type:none;margin:48px 0;padding:0}#root.info #tests .test{background:#fff;margin:12px 0 0 0;padding:8px 12px 12px 12px;border-bottom:1px solid rgba(0,0,0,0.05)}#root.info #tests .label{display:inline-block;width:250px;font-size:1.4em}#root.info #tests .result{display:inline-block;width:250px;text-align:right;font-size:1.4em;font-weight:bold}#root.info #tests .result.passed{color:#4caf50}#root.info #tests .result.failed{color:#f44336}#root.info #tests .info{margin:4px 0 0 0}#content{overflow:auto;flex:1 1 auto;order:50;position:relative}#fallback{display:none;max-width:960px;margin:16px auto;padding:32px 16px}#fallback table{display:block;width:100%;border-collapse:collapse;background:#fff}#fallback th,#fallback td{padding:6px;text-align:left;border:0;border-bottom:1px solid #f0f0f0}#fallback th{color:#aaa;font-weight:normal;line-height:36px}#fallback td{overflow:hidden;white-space:nowrap}#fallback a,#fallback a:active,#fallback a:visited{display:block;color:inherit;text-decoration:none;cursor:pointer}#fallback a:hover,#fallback a:active:hover,#fallback a:visited:hover{color:#42a5f5}#fallback .fb-i{width:20px;padding-left:12px}#fallback .fb-i img{width:20px;height:20px;position:relative;top:-1px}#fallback .fb-n{width:682px;max-width:682px}#fallback .fb-d{text-align:right;width:160px;min-width:160px}#fallback .fb-s{text-align:right;width:70px;min-width:70px;padding-right:12px}#fallback-hints{display:none;overflow:hidden;text-align:right;background:#fafafa;border-bottom:1px solid rgba(0,0,0,0.05)}#fallback-hints a,#fallback-hints a:active,#fallback-hints a:visited{transition:all .2s ease-in-out;display:inline-block;line-height:48px;color:rgba(0,0,0,0.54);text-decoration:none;outline:0}#fallback-hints a:hover,#fallback-hints a:active:hover,#fallback-hints a:visited:hover{color:#42a5f5}#fallback-hints .backlink{margin:0 16px}#fallback-hints .noJsMsg,#fallback-hints .noBrowserMsg{display:none;margin:0 16px;color:#f44336}html.no-js #root,html.no-browser #root{position:static;overflow:auto}html.no-js #fallback,html.no-browser #fallback,html.no-js #fallback-hints,html.no-browser #fallback-hints{display:block}html.no-js .noJsMsg{display:inline!important}html.no-browser .noBrowserMsg{display:inline!important}#mainrow{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row;flex:1 1 auto;order:50;height:0}#notification{position:fixed;left:50%;width:200px;margin-left:-100px;z-index:100;padding:3px 6px 6px 6px;color:#fff;background:rgba(0,0,0,0.2);border-radius:0 0 4px 4px;text-align:center;overflow:hidden}#root{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:column;position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;background:#fff;line-height:1.4}#root,input,select{font-family:"Ubuntu","Roboto","Helvetica","Arial","sans-serif";font-size:13px;font-weight:normal;color:rgba(0,0,0,0.87)}#sidebar{overflow-x:hidden;overflow-y:auto;flex:0 0 auto;order:0;background:#fafafa;border-right:1px solid rgba(0,0,0,0.05);padding:16px;position:absolute;top:48px;min-height:100%;z-index:1}#sidebar .block{display:block;margin:0 0 24px 0;width:168px}#sidebar .block h1{font-size:1em;margin:2px 0 6px 0}#sidebar .button{border-radius:2px;transition:all .2s ease-in-out;display:inline-block;margin:4px;color:rgba(0,0,0,0.87);cursor:pointer}#sidebar .button:hover{background:rgba(0,0,0,0.03)}#sidebar .button.active{background:rgba(0,0,0,0.03);box-shadow:inset 0 0 4px 0 rgba(0,0,0,0.4)}#sidebar .button img{width:24px;height:24px;padding:12px}#sidebar .select{border-radius:2px;background:transparent;overflow:hidden;outline:0;width:160px;margin:4px;line-height:48px}#sidebar input,#sidebar select{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:transparent;width:100%;border:0 solid #000;cursor:pointer;outline:0}#sidebar input:hover,#sidebar select:hover{background:rgba(0,0,0,0.03)}#sidebar select{width:187px;padding:0 8px;height:48px;line-height:48px}#sidebar input[type='range']{border-radius:2px;width:144px;margin:4px;padding:8px;vertical-align:middle;height:32px;line-height:32px}#sidebar .range-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar .range-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar input[type='range']::-webkit-slider-runnable-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-moz-range-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-fill-lower{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-fill-upper{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-webkit-slider-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px;margin-top:-5px}#sidebar input[type='range']::-moz-range-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar input[type='range']::-ms-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar #view-size{display:block}#topbar{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row;overflow:hidden;flex:0 0 auto;order:1;background:#fafafa;border-bottom:1px solid rgba(0,0,0,0.05);z-index:1}#toolbar{overflow:hidden;flex:0 0 auto;order:1;height:48px}#toolbar .tool{transition:all .2s ease-in-out;display:inline-block;cursor:pointer}#toolbar .tool img{display:inline-block;width:24px;height:24px;padding:12px}#toolbar .tool:hover{background:rgba(0,0,0,0.03)}#flowbar{overflow:hidden;flex:1 1 auto;order:2;height:48px}#backlink{transition:all .2s ease-in-out;display:block;flex:0 0 auto;order:99;text-align:center;padding:6px 12px;overflow:hidden;height:36px}#backlink,#backlink:active,#backlink:visited{color:rgba(0,0,0,0.26);cursor:pointer;text-decoration:none}#backlink:hover{color:#42a5f5;background:rgba(0,0,0,0.03)}#backlink:focus{outline:0}#backlink div{line-height:18px;white-space:nowrap}#view.view-details{margin:32px}#view.view-details .header{position:relative;white-space:nowrap;display:list-item;border-bottom:1px solid rgba(0,0,0,0.07);border-radius:2px 2px 0 0}#view.view-details .header .label,#view.view-details .header .date,#view.view-details .header .size{transition:all .2s ease-in-out;line-height:24px;padding:0 8px 16px 8px;opacity:.4;outline:0}#view.view-details .header .label:hover,#view.view-details .header .date:hover,#view.view-details .header .size:hover{opacity:1;color:#42a5f5}#view.view-details .header .sort{display:none;position:relative;top:-2px;width:20px;height:20px;padding:0 4px}#view.view-details .header .ascending .sort{display:inline}#view.view-details .header .descending .sort{display:inline;-webkit-transform:rotate(180deg);transform:rotate(180deg);zoom:1}#view.view-details .item{overflow:hidden;border-bottom:1px solid rgba(0,0,0,0.07)}#view.view-details .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);z-index:1}#view.view-details .item:last-child{border-radius:0 0 2px 2px}#view.view-details .square{display:inline-block;position:absolute;left:16px;top:-1px;padding:8px}#view.view-details .square .thumb{border-radius:2px;box-shadow:0 0 1px 0 rgba(0,0,0,0.2)}#view.view-details .label,#view.view-details .date,#view.view-details .size{padding:0 8px}#view.view-details .date{position:absolute;right:116px;top:0}#view.view-details .size{position:absolute;right:16px;top:0}#view.view-details .item .label,#view.view-details .item .date,#view.view-details .item .size{line-height:30px}#view.view-details .square{width:16px;height:16px}#view.view-details .square img{width:16px;height:16px}#view.view-details .label{margin:0 246px 0 48px}#view.view-details.width-0 .label{margin-right:4px}#view.view-details.width-0 .date{display:none}#view.view-details.width-0 .size{display:none}#view.view-details.width-1 .label{margin-right:64px}#view.view-details.width-1 .date{display:none}#view.view-grid{margin:28px}#view.view-grid .item{border-radius:2px;overflow:hidden;float:left;margin:8px}#view.view-grid .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#view.view-grid .square{display:inline-block;vertical-align:top}#view.view-grid .label{display:inline-block;vertical-align:top;width:180px;padding:0 8px}#view.view-grid .date,#view.view-grid .size{display:none}#view.view-grid .label{line-height:48px}#view.view-grid .square{width:48px;height:48px}#view.view-grid .square img{width:48px;height:48px}#view.view-icons{margin:28px}#view.view-icons .item{border-radius:2px;overflow:hidden;float:left;margin:8px}#view.view-icons .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#view.view-icons .landscape{display:block;background:#fafafa}#view.view-icons .label{padding:0 6px;line-height:24px;text-align:center}#view.view-icons .date,#view.view-icons .size{display:none}#view.view-icons .item{width:128px}#view.view-icons .landscape{width:128px;height:96px}#view.view-icons .landscape img{width:96px;height:96px}#view.view-icons .landscape .thumb{width:128px}#view a,#view a:active,#view a:visited{display:block;color:inherit;cursor:pointer;text-decoration:none}#view ul{margin:0;padding:0;list-style:none}#view .header{display:none}#view .item{position:relative;white-space:nowrap;background:#fff}#view .item:hover{color:#42a5f5;background:#fafafa}#view .folder-parent .date,#view .folder-parent .size{display:none}#view .icon{display:none;text-align:center}#view .icon img{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#view .icon .thumb{max-width:none;max-height:none}#view .label{display:block;overflow:hidden;text-align:left;text-overflow:ellipsis}#view .date{text-align:right;width:130px}#view .size{text-align:right;width:80px}#view #view-hint{display:block;margin-top:36px;text-align:center;color:rgba(0,0,0,0.05);font-size:5em;font-weight:bold}@media only screen and (max-width:700px){#crumbbar .crumb:not(.active){display:none}#crumbbar .crumb.active .sep{width:0}#tree,#info{display:none!important}}@media print{*,*:before,*:after,*:first-letter ,*:first-line {background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}#toolbar,#sidebar,#tree,#info{display:none!important}}
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/ext/README.md b/container/srv-http/root/srv/_h5ai/public/ext/README.md
new file mode 100755
index 0000000..7f9460c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/ext/README.md
@@ -0,0 +1,4 @@
+# Extensions
+
+This directory is used for additional script and style files. You have to add
+them manualy to the `resources` section in `_h5ai/private/conf/options.json`.
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/file.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/file.png
new file mode 100755
index 0000000000000000000000000000000000000000..c796a825dc0d1f519a95280ea35fa9202b11b3bf
GIT binary patch
literal 118
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=t*47)NCo5DGuFHe20TYDOxSZ+
z_?d3=DewOqpL{(U>zS2u`=n!`NVDOIGA5A*237@U#uK|ZbT&Br<NDBK^}P7>*$E2I
R*8&Y<@O1TaS?83{1OS-LCuslx
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png
new file mode 100755
index 0000000000000000000000000000000000000000..38da20dc9262f05651d048f7bbeabf65c50a917f
GIT binary patch
literal 108
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=v8Rh;NCji^0$T~z#Kc5i1s~JH
zPR`E%oi~b^@^VW)Yn#~gGEw1aoZP;)tU&YE7kPV_7+x9Y3kGj{{|cy`!PC{xWt~$(
F696kY9+Ch6
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png
new file mode 100755
index 0000000000000000000000000000000000000000..d4722e788e8e965c019daf82408d6b77f43def6f
GIT binary patch
literal 99
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=mZytjNCjiE#6blUlP~sWGGb!a
w9A-97k?t~>AY@~})+c3=^<YJ#vN!|7p(V4c9yRbW0d+BWy85}Sb4q9e0QU|UrvLx|
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png
new file mode 100755
index 0000000000000000000000000000000000000000..3666dfce1609fa22c165921b6c7c04c29333174a
GIT binary patch
literal 219
zcmeAS@N?(olHy`uVBq!ia0vp^GeDSy8A!f*V=Dxt_yc@GT!C~b65u!G*8>W%mIV0)
zGc^2vpzvi^xHC|o%+tj&q=ND78E;0W03K$?f`+y$PApgUYl(dDJ6-R7AV$SA{`sut
zNjG(7EKM=vPSc!uwkgspZF9mjoI+(K#z>(0z!_BFGwF-&J4?=amST}JZGkRe@O1Ta
JS?83{1OUMlPdESo
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico
new file mode 100755
index 0000000000000000000000000000000000000000..be172231b6902c8f86a2695285a78e4b0f745e6c
GIT binary patch
literal 5430
zcmeH~;SGX7422)+0E}?Ij9cguFoRpj1kT|YY<9ki{3xOELaxTdUeX-*a_xhUatT0#
z9oiP06Rro~2q2|t{h)rQcA~~h?wE8=0QFxSUDxF;F+a<eT*-<2i9qnP`>*f&VeS)a
zw)mCgS~b6=XMP0|LsJ+x?tAA*o}4p@abd`L^cr&T#0UZ_1gvkxOJClCmycC9{51iK
zlb5dD0WTk`Zun~g7AG%VyT|+Y;%wCo{+fWr$xGMn(f?kYt-8Tq6R<dy=r#VQN_^J#
p)bJJ(YqdXVwY<0Z*Ywt%5UYP8kQZYF_I2Z&N8A`WkIll2%O}^3O?3bO
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png
new file mode 100755
index 0000000000000000000000000000000000000000..d7dd0f9a7a2b31f352fdcd9dc472f68e832a0275
GIT binary patch
literal 96
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>Ygr+Ar*|t5;6)VCSUB$WW>a-
tIc#ARkz@+;;9E9}aWPwul)(oEhHuWskKC<%qk&o&JYD@<);T3K0RX3>7Rvwt
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png
new file mode 100755
index 0000000000000000000000000000000000000000..2f97d12e445524bb2af5951cf17593dd823938c3
GIT binary patch
literal 120
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzdrud~kP61P=e7$nDDWH&n6~A4
zV)2SP|GrCee~EWYnYnb<UE4fXj*X%UN5UEeq8W9Wftnz|g3VzH<Np0;D<4_gzXu6<
My85}Sb4q9e0Glo&W&i*H
literal 0
HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg
new file mode 100755
index 0000000..489efbe
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="#555" d="M 1,2 1,14 15,14 15,4 9,4 7,2 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/README.md b/container/srv-http/root/srv/_h5ai/public/images/themes/README.md
new file mode 100755
index 0000000..650e0f7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/README.md
@@ -0,0 +1,9 @@
+# Themes
+
+This directory will contain any themes you add. At the moment there are only
+icon themes supported. The folder structure is: `<theme-name>/<type>.<ext>`,
+with `<ext>` one of `svg`, `png` or `jpg`.
+
+To select a theme use the option `view > theme` in file `conf/options.json`.
+
+You will find the previously included icon themes [here](https://github.com/lrsjng/h5ai-themes).
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg
new file mode 100755
index 0000000..a7cc5cd
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#a4c639" d="M14.5 3.2C14.4 3.2 14.2 3.3 14.1 3.5L13.3 5C12.3 4.4 11.2 4 10 4 8.8 4 7.7 4.3 6.8 4.9L5.9 3.5C5.8 3.3 5.6 3.2 5.5 3.3 5.4 3.3 5.4 3.2 5.3 3.3L5.2 3.3C5 3.5 4.9 3.8 5.1 4L6 5.6C4.8 6.7 4 8.2 4 10L16 10C16 8.3 15.3 6.7 14.1 5.6L15 4C15.1 3.8 15 3.5 14.8 3.3L14.7 3.3C14.7 3.2 14.6 3.2 14.5 3.2zM7.3 7C7.8 7 8.2 7.4 8.2 7.9 8.2 8.4 7.8 8.8 7.3 8.8 6.8 8.8 6.4 8.4 6.4 7.9 6.4 7.4 6.8 7 7.3 7zM12.7 7C13.2 7 13.6 7.4 13.6 7.9 13.6 8.4 13.2 8.8 12.7 8.8 12.2 8.8 11.8 8.4 11.8 7.9 11.8 7.4 12.2 7 12.7 7zM4 10.5L4 16 16 16 16 10.5 4 10.5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg
new file mode 100755
index 0000000..f1efae9
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="-60 -75 20 20">
+ <g fill="#d70751" transform="matrix(0.06427071,0,0,0.06427071,-52.892053,-68.534728)">
+ <path d="m 64.525,62.053 c -4.125,0.058 0.78,2.125 6.165,2.954 1.488,-1.161 2.838,-2.336 4.04,-3.479 -3.354,0.821 -6.765,0.838 -10.205,0.525"/>
+ <path d="m 86.665,56.533 c 2.457,-3.389 4.246,-7.102 4.878,-10.939 -0.551,2.736 -2.035,5.099 -3.435,7.592 -7.711,4.854 -0.726,-2.883 -0.004,-5.824 -8.29,10.436 -1.138,6.257 -1.439,9.171"/>
+ <path d="m 94.839,35.268 c 0.497,-7.428 -1.462,-5.08 -2.121,-2.245 0.766,0.4 1.377,5.237 2.121,2.245"/>
+ <path d="m 48.883,-66.264 c 2.201,0.395 4.757,0.698 4.398,1.224 2.407,-0.528 2.954,-1.015 -4.398,-1.224"/>
+ <path d="m 53.281,-65.04 -1.556,0.32 1.448,-0.127 0.108,-0.193"/>
+ <path d="m 121.93,38.085 c 0.247,6.671 -1.95,9.907 -3.932,15.637 l -3.564,1.781 c -2.919,5.666 0.282,3.598 -1.807,8.105 -4.556,4.049 -13.823,12.67 -16.789,13.457 -2.163,-0.047 1.469,-2.554 1.943,-3.537 -6.097,4.188 -4.894,6.285 -14.217,8.83 L 83.291,81.751 C 60.29,92.569 28.344,71.129 28.765,41.875 28.519,43.732 28.067,43.268 27.557,44.019 26.371,28.967 34.509,13.849 48.232,7.676 61.659,1.03 77.395,3.758 87.012,12.72 81.73,5.8 71.217,-1.534 58.757,-0.848 46.549,-0.655 35.132,7.102 31.321,15.521 c -6.253,3.938 -6.979,15.177 -9.704,17.233 -3.665,26.943 6.896,38.583 24.762,52.275 2.812,1.896 0.792,2.184 1.173,3.627 C 41.616,85.877 36.18,81.68 31.711,76.542 c 2.372,3.473 4.931,6.847 8.239,9.499 -5.596,-1.897 -13.074,-13.563 -15.256,-14.038 9.647,17.274 39.142,30.295 54.587,23.836 -7.146,0.263 -16.226,0.146 -24.256,-2.822 -3.371,-1.734 -7.958,-5.331 -7.14,-6.003 21.079,7.875 42.854,5.965 61.09,-8.655 4.641,-3.614 9.709,-9.761 11.173,-9.846 -2.206,3.317 0.377,1.596 -1.318,4.523 4.625,-7.456 -2.008,-3.035 4.779,-12.877 l 2.507,3.453 c -0.931,-6.188 7.687,-13.704 6.813,-23.492 1.975,-2.994 2.206,3.22 0.107,10.107 2.912,-7.64 0.767,-8.867 1.516,-15.171 0.81,2.118 1.867,4.37 2.412,6.606 -1.895,-7.382 1.948,-12.433 2.898,-16.724 -0.937,-0.415 -2.928,3.264 -3.383,-5.457 0.065,-3.788 1.054,-1.985 1.435,-2.917 -0.744,-0.427 -2.694,-3.33 -3.88,-8.9 0.86,-1.308 2.3,3.393 3.47,3.586 -0.753,-4.429 -2.049,-7.805 -2.103,-11.202 -3.421,-7.149 -1.211,0.953 -3.985,-3.069 -3.641,-11.357 3.021,-2.637 3.47,-7.796 5.52,7.995 8.667,20.387 10.11,25.519 -1.103,-6.258 -2.883,-12.32 -5.058,-18.185 1.677,0.705 -2.699,-12.875 2.18,-3.882 -5.21,-19.172 -22.302,-37.087 -38.025,-45.493 1.924,1.76 4.354,3.971 3.481,4.317 -7.819,-4.656 -6.444,-5.018 -7.565,-6.985 -6.369,-2.591 -6.788,0.208 -11.007,0.004 -12.005,-6.368 -14.318,-5.69 -25.368,-9.681 l 0.502,2.349 c -7.953,-2.649 -9.265,1.005 -17.862,0.009 -0.523,-0.409 2.753,-1.479 5.452,-1.871 -7.69,1.015 -7.329,-1.515 -14.854,0.279 1.855,-1.301 3.815,-2.162 5.793,-3.269 -6.271,0.381 -14.971,3.649 -12.286,0.677 -10.235,4.569 -28.403,10.976 -38.597,20.535 l -0.321,-2.142 c -4.672,5.608 -20.371,16.748 -21.622,24.011 l -1.249,0.291 c -2.431,4.116 -4.004,8.781 -5.932,13.016 -3.18,5.417 -4.661,2.085 -4.208,2.934 -6.253,12.679 -9.359,23.332 -12.043,32.069 1.912,2.858 0.046,17.206 0.769,28.688 -3.141,56.709 39.8,111.77 86.737,124.48 6.88,2.459 17.11,2.364 25.813,2.618 -10.268,-2.937 -11.595,-1.556 -21.595,-5.044 -7.215,-3.398 -8.797,-7.277 -13.907,-11.711 l 2.022,3.573 c -10.021,-3.547 -5.829,-4.39 -13.982,-6.972 l 2.16,-2.82 C 11.175,156.251 5.82,151.022 4.355,148.126 l -3.553,0.14 c -4.27,-5.269 -6.545,-9.063 -6.379,-12.005 l -1.148,2.047 c -1.301,-2.235 -15.709,-19.759 -8.234,-15.679 -1.389,-1.271 -3.235,-2.067 -5.237,-5.703 l 1.522,-1.739 c -3.597,-4.627 -6.621,-10.562 -6.391,-12.536 1.919,2.592 3.25,3.075 4.568,3.52 -9.083,-22.539 -9.593,-1.242 -16.474,-22.942 l 1.456,-0.116 c -1.116,-1.682 -1.793,-3.506 -2.69,-5.298 l 0.633,-6.313 C -44.113,63.94 -39.401,39.351 -38.459,25.865 -37.804,20.38 -33,14.543 -29.345,5.388 l -2.227,-0.384 c 4.256,-7.423 24.301,-29.814 33.583,-28.662 4.499,-5.649 -0.892,-0.02 -1.772,-1.443 9.878,-10.223 12.984,-7.222 19.65,-9.061 7.19,-4.268 -6.17,1.664 -2.761,-1.628 12.427,-3.174 8.808,-7.216 25.021,-8.828 1.71,0.973 -3.969,1.503 -5.395,2.766 10.354,-5.066 32.769,-3.914 47.326,2.811 16.895,7.896 35.873,31.232 36.622,53.189 l 0.852,0.229 c -0.431,8.729 1.336,18.822 -1.727,28.094 l 2.1,-4.385"/>
+ <path d="m 19.5,67.715 -0.578,2.893 c 2.71,3.683 4.861,7.673 8.323,10.552 -2.49,-4.863 -4.341,-6.872 -7.745,-13.445"/>
+ <path d="m 25.909,67.464 c -1.435,-1.587 -2.284,-3.497 -3.235,-5.4 0.909,3.345 2.771,6.219 4.504,9.143 l -1.269,-3.743"/>
+ <path d="m 139.32,42.814 -0.605,1.52 c -1.111,7.892 -3.511,15.701 -7.189,22.941 4.06,-7.639 6.69,-15.995 7.79,-24.461"/>
+ <path d="m 49.698,-68.243 c 2.789,-1.022 6.855,-0.56 9.814,-1.233 -3.855,0.324 -7.693,0.517 -11.484,1.005 l 1.67,0.228"/>
+ <path d="m -48.219,-16.176 c 0.642,5.951 -4.477,8.26 1.134,4.337 3.007,-6.773 -1.175,-1.87 -1.134,-4.337"/>
+ <path d="m -54.812,11.362 c 1.292,-3.967 1.526,-6.349 2.02,-8.645 -3.571,4.566 -1.643,5.539 -2.02,8.645"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg
new file mode 100755
index 0000000..4146098
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 13.913043 15.22257">
+ <g fill="#000" transform="matrix(0.01974442,0,0,0.01974442,0.59799609,3.692127)">
+ <path d="m 242.1304,26.136154 c 12.57375,-1.931991 25.25548,-3.344345 37.9671,-4.013656 2.25826,-0.538041 4.59412,-0.428086 6.90119,-0.510544 18.03637,-0.575318 36.09759,-0.549286 54.12636,0.262939 32.54014,2.301468 64.91549,7.707276 96.30586,16.718582 l -0.13292,0.17627 c -4.60202,6.223907 -9.21752,12.438019 -13.73035,18.725891 -1.35219,0.249481 -2.53581,-0.605759 -3.74014,-1.036484 -23.8157,-9.827469 -49.16701,-15.53215 -74.68315,-18.619186 -41.97006,-4.297928 -84.93817,-0.844666 -125.2014,12.070068 -29.64401,9.587738 -58.27112,24.371842 -80.37665,46.666519 -15.66559,16.020307 -27.69327,36.744737 -29.32584,59.451997 -1.51913,10.82149 1.07187,21.62427 3.36382,32.12558 L 14.185699,205.68005 C 13.945419,188.13843 18.523071,170.78329 25.80806,154.91394 40.297989,124.01501 65.424713,99.327652 93.421997,80.42572 112.35318,67.714981 132.81692,57.345383 154.07152,49.122925 182.38751,38.052567 212.05559,30.488739 242.1304,26.136154 z"/>
+ <path d="m 301.70334,148.63515 c 1.94578,-3.16858 5.37183,-5.69597 9.26865,-5.22687 4.4046,0.11267 7.79878,3.75244 8.71124,7.87158 l 310.75082,55.27789 -1.03752,5.20607 -310.68332,-54.48095 c -2.47844,4.31216 -8.22775,6.5392 -12.74457,3.9928 -3.13145,-1.36889 -4.19975,-4.71973 -5.61303,-7.53113 l -19.12972,-3.06511 0.87691,-5.38129 19.60054,3.33701 z"/>
+ <path d="m 13.649231,221.30466 c 18.262405,-0.12262 36.52626,-0.0226 54.789398,-0.051 0.01808,0.6767 0.05426,2.03008 0.07234,2.70677 13.269959,-2.88977 26.908417,-4.11874 40.480651,-3.36956 9.88256,0.90474 18.95615,5.13992 27.79413,9.3441 -9.96293,6.16172 -20.10092,12.09585 -29.82344,18.61522 -10.834169,-8.36657 -25.559114,-8.37398 -38.193818,-4.71335 -0.157685,1.35187 -0.305954,2.70839 -0.319413,4.07715 0.0064,31.4396 0.01517,62.87977 -0.0037,94.32 -18.255799,-0.006 -36.511368,0.0168 -54.767029,-0.0115 -0.0388,-40.30612 0.01926,-80.61204 -0.02911,-120.91781 z"/>
+ <path d="m 155.75305,221.30997 c 16.07997,-0.13549 32.16204,-0.0238 48.2433,-0.0572 23.83194,-0.13529 48.05416,2.93651 70.20328,12.1031 13.75632,5.82483 27.06233,14.43199 35.03758,27.39059 6.05672,10.0663 8.17432,22.99054 3.41974,34.00478 -5.58125,13.21376 -17.53407,22.37564 -29.70006,29.22304 -22.30197,11.93273 -47.08825,18.27707 -72.31572,19.34199 l -0.0437,24.93099 -54.85077,7.52423 0.006,-154.46153 z"/>
+ <path d="m 350.73776,221.33231 c 62.75727,-0.19167 125.51848,-0.0234 188.27761,-0.0843 18.36058,0.076 37.02661,0.1922 54.8872,4.94194 5.14029,1.69319 11.99558,3.70666 13.34763,9.68171 0.13403,35.45186 0.05,70.91191 0.0409,106.36713 -18.26615,-0.004 -36.53138,-0.0113 -54.79609,0.004 -0.004,-35.17893 -0.0756,-70.3591 0.0357,-105.53679 -3.31824,-2.87891 -8.04874,-2.75609 -12.16869,-3.25885 -11.26521,-0.29326 -22.53945,-0.084 -33.80654,-0.11576 0.002,36.30307 0.0406,72.60642 -0.0191,108.90969 -18.292,-0.0171 -36.58319,0.005 -54.87403,-0.0112 -0.0542,-29.07907 -0.008,-58.15799 -0.0231,-87.23671 -0.14635,-6.3542 0.31845,-12.73225 -0.27677,-19.06588 -5.14636,-2.16309 -10.78398,-2.58689 -16.30214,-2.61335 -9.79776,-0.0158 -19.5944,0.007 -29.39029,-0.01 -0.048,36.31536 0.0591,72.63149 -0.0537,108.94673 -17.22348,-0.022 -34.44665,-0.0339 -51.66902,0.007 l -3.31752,-0.0131 c 0.28336,-40.07539 0.0678,-80.83315 0.108,-120.91222 z"/>
+ <path fill="#d72123" d="m 423.56764,57.495636 c 4.51283,-6.287872 9.12833,-12.501984 13.73035,-18.725891 42.14722,12.344238 82.84823,31.836792 116.09491,60.881943 13.59442,12.173292 25.88991,25.944912 35.33316,41.613512 11.1826,18.43936 18.26884,39.55612 19.02705,61.19006 -33.0565,-5.77759 -66.1038,-11.60446 -99.1558,-17.40172 4.06793,-12.93818 4.10266,-27.0249 1.31704,-40.22806 -5.16264,-22.81849 -19.7915,-42.41004 -37.43728,-57.282084 C 457.76711,75.165924 440.98531,65.246307 423.20515,57.986771 l 0.36249,-0.491135 z"/>
+ <path fill="#fff" d="m 210.67975,234.60013 c 14.04689,1.40957 26.7447,9.34711 36.33964,19.39103 8.27451,8.70258 14.12349,20.84611 12.10276,33.07682 -2.20877,12.25284 -10.73442,22.20633 -20.32152,29.61572 -8.32672,6.11266 -17.74312,11.38919 -28.12337,12.77234 -0.0358,-31.61874 -0.0407,-63.2376 0.002,-94.85591 z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg
new file mode 100755
index 0000000..487a535
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g transform="matrix(0.04742975,0,0,0.04742975,2.9426429,-1.9210171)">
+ <path fill="#1572b6" d="M 27.142,386.29 0.071,82.67 l 297.45,0 -27.096,303.571 -121.811,33.77 L 27.142,386.29 z m 0,0"/>
+ <path fill="#33a9dc" d="m 148.798,394.199 98.427,-27.288 23.157,-259.415 -121.584,0 0,286.703 z m 0,0"/>
+ <g transform="translate(55,142)">
+ <path fill="#ffffff" d="m 93.797,75.496 49.275,0 3.403,-38.132 -52.678,0 0,-37.239 0.129,0 93.246,0 -0.893,9.991 -9.152,102.616 -83.33,0 0,-37.236 z m 0,0"/>
+ <path fill="#ebebeb" d="m 94.02,172.204 -0.163,0.046 -41.472,-11.199 -2.652,-29.698 -20.151,0 -17.228,0 5.216,58.467 76.278,21.176 0.172,-0.048 0,-38.744 z m 0,0"/>
+ <path fill="#ffffff" d="m 139.907,111.156 -4.484,49.87 -41.532,11.21 0,38.742 76.339,-21.158 0.56,-6.29 6.478,-72.374 -37.361,0 z m 0,0"/>
+ <path fill="#ebebeb" d="m 93.926,0.125 0,23.128 0,14.019 0,0.092 -89.828,0 -0.119,0 -0.747,-8.37 -1.697,-18.878 -0.89,-9.991 93.281,0 z m 0,0"/>
+ <path fill="#ebebeb" d="m 93.797,75.5 0,23.129 0,14.017 0,0.092 -40.828,0 -0.119,0 -0.746,-8.369 -1.698,-18.878 -0.89,-9.991 44.281,0 z m 0,0"/>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg
new file mode 100755
index 0000000..0d21bb0
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 10.634,-238.979 c 0.764,15.751 16.499,8.463 23.626,3.539 6.765,-4.675 8.743,-0.789 9.337,-10.015 0.389,-6.064 1.088,-12.128 0.744,-18.216 -10.23,-0.927 -21.357,1.509 -29.744,7.602 -4.32,3.139 -12.42,13.158 -3.963,17.09" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#c6b198" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 10.634,-238.979 c 2.29,-0.852 4.717,-1.457 6.271,-3.528" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#6ad7e5" fill-rule="evenodd" stroke="#000" stroke-width="3" d="M46.997-426.619c-60.297-16.956-15.461-93.664 32.959-62.113l-32.959 62.113zM314.895-494.488c47.727-33.523 90.856 42.111 35.388 61.141l-35.388-61.141z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 325.161,-45.128999 c 12.123,7.501 34.282,30.182 16.096,41.1799995 -17.474,15.9990005 -27.254,-17.5609995 -42.591,-22.2109995 6.605,-8.97 14.977,-17.149 26.495,-18.969 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="none" stroke="#000" stroke-width="3" d="m 341.257,-3.9499995 c -2.696,-5.361 -3.601,-11.6179995 -8.102,-15.9389995" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 108.579,-19.496999 c -14.229,2.202 -22.238,15.0389995 -34.1,21.5579995 -11.178,6.665 -15.454,-2.13399996 -16.461,-3.92 -1.752,-0.799 -1.605,0.744 -4.309,-1.979 -10.362,-16.3539995 10.797,-28.3079995 21.815,-36.4319995 15.346,-3.102 24.963,10.202 33.055,20.773 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="none" stroke="#000" stroke-width="3" d="m 58.019,-1.8599995 c 0.542,-6.233 5.484,-10.4069995 7.838,-15.6769995" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill-rule="evenodd" d="M49.513-447.805c-7.955-4.208-13.791-9.923-8.925-19.124 4.505-8.518 12.874-7.593 20.83-3.385l-11.905 22.509zM337.716-455.805c7.955-4.208 13.791-9.923 8.925-19.124-4.505-8.518-12.874-7.593-20.83-3.385l11.905 22.509z" clip-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 392.475,-240.979 c -0.764,15.751 -16.499,8.463 -23.626,3.539 -6.765,-4.675 -8.743,-0.789 -9.337,-10.015 -0.389,-6.064 -1.088,-12.128 -0.744,-18.216 10.23,-0.927 21.357,1.509 29.744,7.602 4.319,3.139 12.42,13.158 3.963,17.09" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#c6b198" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 392.475,-240.979 c -2.29,-0.852 -4.717,-1.457 -6.271,-3.528" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#6ad7e5" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 195.512,13.124 c 60.365,0 116.953,8.633 146.452,66.629 26.478,65.006 17.062,135.104 21.1,203.806 3.468,58.992 11.157,127.145 -16.21,181.812 -28.79,57.514 -100.73,71.982 -160,69.863 C 140.299,533.568 84.06,518.38 57.785,475.845 26.959,425.945 41.553,351.747 43.792,296.223 46.444,230.452 25.977,164.481 47.584,100.122 69.999,33.359 130.451,18.271 195.512,13.124" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 1.636)"/>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="2.908" d="m 206.169,-445.312 c 10.838,63.003 113.822,46.345 99.03,-17.197 -13.264,-56.98 -102.632,-41.208 -99.03,17.197" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="2.821" d="m 83.103,-435.122 c 14.047,54.85 101.864,40.807 98.554,-14.213 -3.966,-65.895 -111.984,-53.18 -98.554,14.213" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 218.594,-369.71 c 0.046,8.191 1.861,17.387 0.312,26.101 -2.091,3.952 -6.193,4.37 -9.729,5.967 -4.89,-0.767 -9.002,-3.978 -10.963,-8.552 -1.255,-9.946 0.468,-19.576 0.785,-29.526 l 19.595,6.01 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <g fill-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 1.636)" clip-rule="evenodd">
+ <ellipse cx="107.324" cy="95.404" ry="16.062" rx="14.829"/>
+ <ellipse cx="114.069" cy="99.029" fill="#fff" ry="4.082" rx="3.496"/>
+ </g>
+ <g fill-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 1.636)" clip-rule="evenodd">
+ <ellipse cx="231.571" cy="91.404" ry="16.062" rx="14.582"/>
+ <ellipse cx="238.204" cy="95.029" fill="#fff" ry="4.082" rx="3.438"/>
+ </g>
+ <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 176.217,-370.602 c -6.47,15.68 3.608,47.035 21.163,23.908 -1.255,-9.946 0.468,-19.576 0.785,-29.526 l -21.948,5.618 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/>
+ <g fill-rule="evenodd" clip-rule="evenodd">
+ <path fill="#f6d2a2" stroke="#231f20" stroke-width="3" d="m 178.431,138.673 c -12.059,1.028 -21.916,15.366 -15.646,26.709 8.303,15.024 26.836,-1.329 38.379,0.203 13.285,0.272 24.17,14.047 34.84,2.49 11.867,-12.854 -5.109,-25.373 -18.377,-30.97 l -39.196,1.568 z" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 1.636)"/>
+ <path d="m 176.913,138.045 c -0.893,-20.891 38.938,-23.503 43.642,-6.016 4.692,17.446 -41.681,21.498 -43.642,6.016 -1.565,-12.363 0,0 0,0 z" transform="matrix(.03 0 0 .03 3.959 1.636)"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg
new file mode 100755
index 0000000..356e855
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg
@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g transform="matrix(0.03889348,0,0,0.03889348,0.04326912,-1.9134619)">
+ <polygon fill="#e44d26" points="437.367,100.62 404.321,470.819 255.778,512 107.644,470.877 74.633,100.62"/>
+ <polygon fill="#f16529" points="256,130.894 256,480.523 376.03,447.246 404.27,130.894"/>
+ <polygon fill="#ebebeb" points="143.219,188.488 154.38,313.627 256,313.627 256,268.217 195.91,268.217 191.76,221.716 256,221.716 256,176.305 255.843,176.305 142.132,176.305"/>
+ <polygon fill="#ebebeb" points="256,386.153 255.801,386.206 205.227,372.55 201.994,336.333 177.419,336.333 156.409,336.333 162.771,407.634 255.791,433.457 256,433.399"/>
+ <polygon fill="#ffffff" points="255.843,433.435 348.937,407.634 349.62,399.962 360.291,280.411 361.399,268.217 349.162,268.217 255.843,268.217 255.843,313.627 311.761,313.627 306.49,372.521 255.843,386.191"/>
+ <polygon fill="#ffffff" points="366.442,211.509 368.511,188.488 369.597,176.305 255.843,176.305 255.843,204.509 255.843,221.605 255.843,221.716 365.385,221.716 365.385,221.716 365.531,221.716"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg
new file mode 100755
index 0000000..91a3279
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#fbc02d" stroke="#fbc02d" stroke-width="1" d="M 14.1875 4.6875 C 13.09018 4.6875104 12.199333 4.9405471 11.5625 5.46875 C 10.925664 5.9871904 10.624999 6.7055265 10.625 7.625 C 10.624999 8.0651846 10.696787 8.4682415 10.84375 8.78125 C 11.000508 9.0942712 11.192562 9.3375261 11.4375 9.5625 C 11.692232 9.7874849 11.989182 9.9997477 12.3125 10.15625 C 12.645612 10.302981 12.991037 10.435342 13.34375 10.5625 C 13.696455 10.679886 14.006917 10.810341 14.28125 10.9375 C 14.555575 11.054885 14.782593 11.165778 14.96875 11.3125 C 15.164694 11.449448 15.308271 11.605183 15.40625 11.78125 C 15.514016 11.957323 15.562494 12.16171 15.5625 12.40625 C 15.562494 12.817085 15.428715 13.150022 15.125 13.375 C 14.821273 13.599981 14.322474 13.718751 13.65625 13.71875 C 13.019412 13.718751 12.481931 13.646727 12.03125 13.5 C 11.580565 13.353276 11.23328 13.209228 10.96875 13.0625 L 10.40625 14.5625 C 10.52382 14.630973 10.679049 14.724461 10.875 14.8125 C 11.070949 14.890754 11.297967 14.952993 11.5625 15.03125 C 11.836828 15.109504 12.157087 15.169839 12.5 15.21875 C 12.852707 15.277443 13.234955 15.3125 13.65625 15.3125 C 14.910321 15.3125 15.853361 15.061368 16.5 14.5625 C 17.156424 14.053851 17.499993 13.325734 17.5 12.40625 C 17.499993 11.92695 17.418407 11.551332 17.28125 11.21875 C 17.144079 10.876394 16.952025 10.557047 16.6875 10.3125 C 16.432759 10.058181 16.132095 9.8635762 15.75 9.6875 C 15.377691 9.5016528 14.948821 9.3010768 14.46875 9.125 C 14.194416 9.0271889 13.922635 8.9201051 13.6875 8.8125 C 13.462155 8.7049074 13.270101 8.5959189 13.09375 8.46875 C 12.92719 8.3415943 12.785469 8.2190145 12.6875 8.0625 C 12.599319 7.896218 12.562497 7.693737 12.5625 7.46875 C 12.562497 7.0970525 12.694418 6.7991744 12.96875 6.59375 C 13.252873 6.3883426 13.656575 6.2812588 14.15625 6.28125 C 14.577537 6.2812588 14.983096 6.3396915 15.375 6.4375 C 15.776691 6.5353258 16.13563 6.6891556 16.46875 6.875 L 17.03125 5.375 C 16.747117 5.2087206 16.374665 5.0432042 15.875 4.90625 C 15.385121 4.7595342 14.82433 4.6875104 14.1875 4.6875 z M 6.9375 4.9375 L 6.9375 11.625 C 6.9374954 12.387977 6.8153722 12.936987 6.53125 13.25 C 6.2471196 13.563017 5.7832845 13.718751 5.15625 13.71875 C 4.7839439 13.718751 4.4250043 13.646727 4.0625 13.5 C 3.7097899 13.343494 3.4011857 13.166291 3.15625 13 L 2.5 14.46875 C 2.7547338 14.674167 3.1234709 14.876648 3.59375 15.0625 C 4.0738243 15.238567 4.6346149 15.3125 5.28125 15.3125 C 5.9768667 15.3125 6.5493124 15.217103 7 15.03125 C 7.460476 14.845398 7.829213 14.604047 8.09375 14.28125 C 8.3680731 13.958455 8.5484718 13.555398 8.65625 13.125 C 8.7640159 12.694607 8.8124936 12.248871 8.8125 11.75 L 8.8125 4.9375 L 6.9375 4.9375 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg
new file mode 100755
index 0000000..fd15b02
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g fill="#5c6bc0" transform="matrix(0.02460339,0,0,0.02460339,1.0508613,-2.0358995)">
+ <path d="m 635.0385,526.8108 c 35.909,12.563 53.856,34.088 53.856,64.543 0,20.046 -7.443,35.957 -22.296,47.725 -14.838,11.776 -36.005,19.084 -63.557,19.084 -27.552,0 -53.037,-7.983 -76.51,-21.088 0.254,-6.95 2.091,-14.575 5.463,-22.852 3.372,-8.277 7.363,-14.853 11.936,-19.656 21.573,11.211 40.346,16.826 56.281,16.826 7.531,0 13.358,-1.264 17.414,-3.809 4.063,-2.536 6.083,-5.94 6.083,-10.217 0,-8.039 -6.226,-14.051 -18.638,-18.058 l -22.296,-8.421 c -33.73,-12.293 -50.596,-32.323 -50.596,-60.146 0,-20.316 7.085,-36.418 21.255,-48.33 14.17,-11.895 33.269,-22.137 57.283,-22.137 11.88,0 24.96,1.67 39.272,5.01 14.297,3.348 26.042,11.594 35.218,16.125 0.541,7.49 -0.962,15.712 -4.452,24.665 -3.515,8.961 -7.824,15.306 -12.969,19.052 -22.685,-10.162 -41.562,-15.243 -56.686,-15.243 -5.415,0 -9.494,1.201 -12.357,3.618 -2.831,2.41 -4.223,5.478 -4.223,9.224 0,6.417 5.121,11.49 15.386,15.235 l 25.133,8.85 z"/>
+ <path d="m 455.6835,526.8108 c 35.909,12.563 53.848,34.088 53.848,64.543 0,20.046 -7.443,35.957 -22.272,47.725 -14.853,11.776 -36.028,19.084 -63.572,19.084 -27.528,0 -53.045,-7.983 -76.51,-21.088 0.254,-6.95 2.091,-14.575 5.47,-22.852 3.372,-8.277 7.347,-14.853 11.936,-19.656 21.597,11.211 40.362,16.826 56.289,16.826 7.538,0 13.366,-1.264 17.406,-3.809 4.048,-2.536 6.083,-5.94 6.083,-10.217 0,-8.039 -6.226,-14.051 -18.638,-18.058 l -22.281,-8.421 c -33.738,-12.293 -50.611,-32.323 -50.611,-60.146 0,-20.316 7.085,-36.418 21.27,-48.33 14.162,-11.895 33.253,-22.137 57.267,-22.137 11.872,0 24.984,1.67 39.265,5.01 14.313,3.348 26.042,11.594 35.225,16.125 0.541,7.49 -0.962,15.712 -4.452,24.665 -3.507,8.961 -7.824,15.306 -12.961,19.052 -22.694,-10.162 -41.571,-15.243 -56.702,-15.243 -5.407,0 -9.502,1.201 -12.349,3.618 -2.823,2.41 -4.23,5.478 -4.23,9.224 0,6.417 5.128,11.49 15.394,15.235 l 25.125,8.85 z"/>
+ <path d="m 324.8885,529.6408 c 0,-12.293 -1.956,-23.656 -5.868,-34.089 -3.904,-10.432 -9.51,-19.378 -16.794,-26.868 -7.292,-7.49 -16.126,-13.367 -26.511,-17.645 -10.401,-4.27 -22.074,-10.711 -35.027,-10.711 -15.387,0 -28.816,6.966 -40.282,12.317 -11.466,5.344 -20.913,12.691 -28.332,22.05 -7.435,9.366 -12.969,20.388 -16.611,33.086 -3.642,12.699 -5.463,26.534 -5.463,41.499 0,15.49 1.479,29.818 4.453,42.914 2.966,13.08 8.03,24.435 15.18,34.073 7.156,9.621 16.467,17.104 27.941,22.439 11.474,5.344 25.715,9.447 42.716,9.447 31.305,0 57.752,-9.065 79.348,-24.292 -2.139,-15.49 -7.657,-27.807 -16.523,-36.896 -11.029,4.142 -20.786,7.108 -29.246,8.93 -8.468,1.798 -15.935,2.704 -22.383,2.704 -12.906,0 -22.193,-3.284 -27.83,-9.915 -5.631,-6.608 -8.72,-14.424 -9.267,-26.296 h 105.265 c 3.477,-11.243 5.234,-26.438 5.234,-42.747 z m -110.9,2.776 c 0.802,-13.645 3.292,-28.244 7.435,-34.255 4.151,-6.019 10.504,-9.025 19.083,-9.025 8.835,0 15.466,3.197 19.879,9.614 4.422,6.417 6.631,19.346 6.631,29.237 l 0.008,4.429 h -53.036 l 0,0 z"/>
+ <path d="m 129.3525,604.6078 h -10.933 c -11.887,0 -16.364,-6.25 -16.364,-18.805 V 355.05779 c 0,-13.875 -4.007,-23.616 -9.137,-29.229 -5.129,-5.598 -14.034,-5.542 -26.717,-5.542 h -24.69 l -2.91,-0.056 v 0.238 l -0.024,34.343 V 596.9678 c 0,19.258 4.326,33.349 12.022,42.318 7.705,8.953 20.722,13.422 39.074,13.422 12.691,0 27.131,-1.336 43.32,-4.016 0.811,-2.704 1.217,-8.492 1.217,-17.374 0,-8.906 -1.621,-17.788 -4.858,-26.71 z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg
new file mode 100755
index 0000000..a2fba14
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#ad1457" d="M12.078 10h2.3V6.007h2.32V10H19l-3.46 3.993zM1 13.993V6.007h2.32l2.355 2.917L8.03 6.007h2.32v7.986H8.03V9.398l-2.355 2.887L3.32 9.398v4.595z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg
new file mode 100755
index 0000000..84e1e22
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#6c7eb7" fill-rule="evenodd" d="M 8.625 5.65625 L 7.25 12.6875 L 8.90625 12.6875 L 9.6875 8.78125 L 11 8.78125 C 11.609 8.78125 11.587 9.03375 11.5 9.46875 L 10.90625 12.6875 L 12.65625 12.6875 L 13.25 9.125 C 13.424 8.255 12.892 7.55575 11.5 7.46875 L 9.9375 7.46875 L 10.28125 5.65625 L 8.625 5.65625 z M 2.34375 7.46875 L 0.9375 14.53125 L 2.59375 14.53125 L 2.9375 12.6875 L 4.5 12.6875 C 5.979 12.7745 7.65625 11.55675 7.65625 9.46875 C 7.65625 8.25075 6.9545 7.55575 5.5625 7.46875 L 2.34375 7.46875 z M 13.84375 7.46875 L 12.4375 14.5 L 14.09375 14.5 L 14.4375 12.6875 L 16 12.6875 C 17.47899 12.7745 19.125 11.556754 19.125 9.46875 C 19.125 8.2507462 18.454491 7.55575 17.0625 7.46875 L 13.84375 7.46875 z M 15.21875 8.75 L 16.34375 8.75 C 16.952746 8.75 17.40625 9.0092466 17.40625 9.53125 C 17.31925 11.010253 16.626745 11.288 15.84375 11.375 L 14.78125 11.375 L 15.21875 8.75 z M 3.71875 8.78125 L 4.875 8.78125 C 5.484 8.78125 5.90625 9.0405 5.90625 9.5625 C 5.81925 11.0415 5.12675 11.31925 4.34375 11.40625 L 3.28125 11.40625 L 3.71875 8.78125 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg
new file mode 100755
index 0000000..d5dc003
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <g transform="translate(-473.36088,-341.57095)">
+ <g transform="matrix(0.14489978,0,0,0.14489978,468.84945,333.83641)">
+ <path fill="#387eb8" d="M 99.75,67.46875 C 71.718268,67.468752 73.46875,79.625 73.46875,79.625 L 73.5,92.21875 l 26.75,0 0,3.78125 -37.375,0 c 0,0 -17.9375,-2.034276 -17.9375,26.25 -2e-6,28.28427 15.65625,27.28125 15.65625,27.28125 l 9.34375,0 0,-13.125 c 0,0 -0.503652,-15.65625 15.40625,-15.65625 15.9099,0 26.53125,0 26.53125,0 0,0 14.90625,0.24096 14.90625,-14.40625 0,-14.647206 0,-24.21875 0,-24.21875 0,-2e-6 2.26318,-14.65625 -27.03125,-14.65625 z M 85,75.9375 c 2.661429,-2e-6 4.8125,2.151071 4.8125,4.8125 2e-6,2.661429 -2.151071,4.8125 -4.8125,4.8125 -2.661429,2e-6 -4.8125,-2.151071 -4.8125,-4.8125 -2e-6,-2.661429 2.151071,-4.8125 4.8125,-4.8125 z"/>
+ <path fill="#ffe052" d="m 100.5461,177.31485 c 28.03174,0 26.28125,-12.15625 26.28125,-12.15625 l -0.0312,-12.59375 -26.75,0 0,-3.78125 37.375,0 c 0,0 17.9375,2.03427 17.9375,-26.25001 10e-6,-28.284267 -15.65625,-27.281247 -15.65625,-27.281247 l -9.34375,0 0,13.124997 c 0,0 0.50366,15.65625 -15.40625,15.65625 -15.909902,0 -26.531252,0 -26.531252,0 0,0 -14.90625,-0.24096 -14.90625,14.40626 0,14.6472 0,24.21875 0,24.21875 0,0 -2.26318,14.65625 27.031252,14.65625 z m 14.75,-8.46875 c -2.66143,0 -4.8125,-2.15107 -4.8125,-4.8125 0,-2.66143 2.15107,-4.8125 4.8125,-4.8125 2.66143,0 4.8125,2.15107 4.8125,4.8125 1e-5,2.66143 -2.15107,4.8125 -4.8125,4.8125 z"/>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg
new file mode 100755
index 0000000..a642dc2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#e53935" d="M 10.707376,3.0220971 12.625,4.28125 11.5,7.90625 7.4375,11.6875 3.90625,12.46875 3.1875,10.46875 3,14.15625 c 0.07668,2.758421 2.05851,2.788289 2.90625,2.8125 L 5.875,17 16.96875,16.90625 17.0625,5.8125 C 17.122609,4.2480709 15.364825,3.0014165 14.375,3 z M 5.8700983,5.9390704 C 3.7805688,8.0101404 3.256183,9.918237 4.289943,10.960517 5.3229925,12.003507 7.2816787,11.165285 9.3712087,9.09421 11.460739,7.0231401 12.097651,5.0845033 11.06453,4.0415133 9.4255397,2.6480655 6.9773962,4.7208064 5.8700983,5.9390704 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg
new file mode 100755
index 0000000..0a71e77
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#795548" d="M18 9.9 17.3 9.5c0 0 0-0.1 0-0.1L17.9 8.8C17.9 8.8 18 8.6 18 8.5 18 8.4 17.9 8.4 17.9 8.4L17.1 8.1c0 0 0-0.1 0-0.1l0.4-0.7c0 0 0-0.1 0-0.3 0-0.1-0.1-0.1-0.1-0.1L16.5 6.7c0 0 0-0.1-0.1-0.1l0.3-0.7c0-0.1 0-0.1 0-0.3 0 0-0.1-0.1-0.1-0.1l-0.8 0c0 0-0.1-0.1-0.1-0.1L15.7 4.6c0-0.1 0-0.1 0-0.3 0 0-0.1-0.1-0.3 0l-0.8 0.1c0 0-0.1-0.1-0.1-0.1l0-0.8c0-0.1 0-0.1-0.1-0.1 0 0-0.1 0-0.3 0l-0.7 0.3c0 0-0.1 0-0.1-0.1L13.1 2.7c0-0.1 0-0.1-0.1-0.1-0.1 0-0.1 0-0.3 0l-0.7 0.4c0 0-0.1 0-0.1 0L11.6 2.3c0-0.1-0.1-0.1-0.1-0.1-0.1 0-0.1 0-0.3 0.1l-0.5 0.5c0 0-0.1 0-0.1 0L10.1 2.1C10.1 2 10 2 10 2 9.9 2 9.9 2 9.9 2.1l-0.4 0.7c0 0-0.1 0-0.1 0L8.8 2.3c0 0-0.1-0.1-0.3-0.1-0.1 0-0.1 0.1-0.1 0.1L8.1 2.9c0 0-0.1 0-0.1 0L7.3 2.5c0 0-0.1 0-0.3 0-0.1 0-0.1 0.1-0.1 0.1L6.7 3.5c0 0-0.1 0-0.1 0.1L5.9 3.4c-0.1 0-0.1 0-0.3 0 0 0-0.1 0.1-0.1 0.1l0 0.8c0 0-0.1 0.1-0.1 0.1L4.6 4.3c-0.1 0-0.1 0-0.3 0 0 0-0.1 0.1 0 0.3l0.1 0.8c0 0-0.1 0.1-0.1 0.1l-0.8 0c-0.1 0-0.1 0-0.1 0.1 0 0 0 0.1 0 0.3l0.3 0.7c0 0 0 0.1-0.1 0.1L2.7 6.9c-0.1 0-0.1 0-0.1 0.1 0 0.1 0 0.1 0 0.3l0.4 0.7c0 0 0 0.1 0 0.1L2.3 8.4c-0.1 0-0.1 0.1-0.1 0.1 0 0.1 0 0.1 0.1 0.3l0.5 0.5c0 0 0 0.1 0 0.1L2.1 9.9C2 9.9 2 10 2 10c0 0.1 0 0.1 0.1 0.1l0.7 0.4c0 0 0 0.1 0 0.1l-0.5 0.5c0 0-0.1 0.1-0.1 0.3 0 0.1 0.1 0.1 0.1 0.1l0.7 0.3c0 0 0 0.1 0 0.1l-0.4 0.7c0 0 0 0.1 0 0.3 0 0.1 0.1 0.1 0.1 0.1l0.8 0.1c0 0 0 0.1 0.1 0.1l-0.3 0.7c0 0.1 0 0.1 0 0.3 0 0 0.1 0.1 0.1 0.1l0.8 0c0 0 0.1 0.1 0.1 0.1l-0.1 0.8c0 0.1 0 0.1 0 0.3 0 0 0.1 0.1 0.3 0l0.8-0.1c0 0 0.1 0.1 0.1 0.1l0 0.8c0 0.1 0 0.1 0.1 0.1 0 0 0.1 0 0.3 0l0.7-0.3c0 0 0.1 0 0.1 0.1l0.1 0.8c0 0.1 0 0.1 0.1 0.1 0.1 0 0.1 0 0.3 0l0.7-0.4c0 0 0.1 0 0.1 0l0.3 0.7c0 0.1 0.1 0.1 0.1 0.1 0.1 0 0.1 0 0.3-0.1l0.5-0.5c0 0 0.1 0 0.1 0l0.4 0.7C9.9 17.9 10 18 10 18c0.1 0 0.1 0 0.1-0.1l0.4-0.7c0 0 0.1 0 0.1 0l0.5 0.5c0 0 0.1 0.1 0.3 0.1 0.1 0 0.1-0.1 0.1-0.1l0.3-0.7c0 0 0.1 0 0.1 0l0.7 0.4c0 0 0.1 0 0.3 0 0.1 0 0.1-0.1 0.1-0.1l0.1-0.8c0 0 0.1 0 0.1-0.1l0.7 0.3c0.1 0 0.1 0 0.3 0 0 0 0.1-0.1 0.1-0.1l0-0.8c0 0 0.1-0.1 0.1-0.1l0.8 0.1c0.1 0 0.1 0 0.3 0 0 0 0.1-0.1 0-0.3l-0.1-0.8c0 0 0.1-0.1 0.1-0.1l0.8 0c0.1 0 0.1 0 0.1-0.1 0 0 0-0.1 0-0.3l-0.3-0.7c0 0 0-0.1 0.1-0.1l0.8-0.1c0.1 0 0.1 0 0.1-0.1 0-0.1 0-0.1 0-0.3l-0.4-0.7c0 0 0-0.1 0-0.1l0.7-0.3c0.1 0 0.1-0.1 0.1-0.1 0-0.1 0-0.1-0.1-0.3l-0.5-0.5c0 0 0-0.1 0-0.1l0.7-0.4C18 10.1 18 10 18 10 18 9.9 18 9.9 17.9 9.9zm-4.5 5.6c-0.3 0-0.4-0.3-0.4-0.5 0-0.3 0.3-0.4 0.5-0.4 0.3 0 0.4 0.3 0.4 0.5 0 0.3-0.3 0.4-0.5 0.4zm-0.3-1.5c-0.3 0-0.4 0.1-0.5 0.3l-0.3 1.1C11.8 15.6 10.9 15.8 10 15.8c-0.8 0-1.8-0.1-2.4-0.5L7.3 14.2c0-0.3-0.3-0.4-0.5-0.3L5.8 14.2C5.7 13.9 5.5 13.7 5.4 13.5l4.7 0c0 0 0.1 0 0.1 0l0-1.6c0 0 0 0-0.1 0l-1.4 0 0-1.1 1.5 0c0.1 0 0.7 0 0.9 0.8 0 0.3 0.1 0.9 0.3 1.2 0.1 0.3 0.4 0.8 0.8 0.8l2.4 0c0 0 0 0 0.1 0-0.1 0.3-0.4 0.4-0.5 0.7l-1.1-0.4zm-6.6 1.5c-0.3 0-0.5-0.1-0.5-0.4 0-0.3 0.1-0.5 0.4-0.5 0.3 0 0.5 0.1 0.5 0.4 0 0.3-0.1 0.5-0.4 0.5zM4.8 8.1c0.1 0.3 0 0.5-0.3 0.7-0.3 0.1-0.5 0-0.7-0.3-0.1-0.3 0-0.5 0.3-0.7 0.3-0.1 0.5 0 0.7 0.3zM4.3 9.5 5.4 9.1C5.7 8.9 5.7 8.6 5.7 8.5l-0.3-0.5 0.8 0 0 3.8-1.6 0C4.4 11.2 4.3 10.7 4.3 10.1c0-0.3 0-0.4 0-0.7zm4.5-0.4 0-1.1 2 0c0.1 0 0.7 0.1 0.7 0.5 0 0.4-0.4 0.5-0.8 0.5l-1.8 0zM16 10c0 0.1 0 0.3 0 0.4l-0.5 0c0 0-0.1 0-0.1 0.1l0 0.3c0 0.7-0.4 0.8-0.7 0.8-0.3 0-0.7-0.1-0.7-0.3-0.1-0.9-0.5-1.2-0.9-1.6 0.5-0.4 1.2-0.9 1.2-1.6 0-0.8-0.5-1.4-0.9-1.5C12.7 6.2 12.2 6.2 12 6.2l-6.2 0C6.6 5.3 7.8 4.6 9.1 4.3l0.7 0.8c0.1 0.1 0.4 0.1 0.7 0l0.8-0.8c1.8 0.3 3.1 1.4 3.9 2.8l-0.5 1.2c-0.1 0.3 0 0.4 0.3 0.5l1.1 0.5c0 0.1 0 0.4 0 0.5zM9.7 3.6c0.1-0.1 0.5-0.1 0.7 0 0.1 0.1 0.1 0.5 0 0.7-0.1 0.1-0.5 0.1-0.7 0-0.1-0.1-0.1-0.5 0-0.7zm5.6 4.5C15.4 7.8 15.7 7.7 16 7.8 16.2 8 16.4 8.2 16.2 8.5 16.1 8.8 15.8 8.9 15.6 8.8 15.3 8.6 15.2 8.4 15.3 8.1z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg
new file mode 100755
index 0000000..f8704e8
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#1976d2" d="M 8.59375 3 L 8 5.09375 L 6.84375 5.8125 L 4.625 5.34375 L 3.21875 7.65625 L 4.84375 9.3125 L 4.84375 10.6875 L 3.21875 12.34375 L 4.625 14.65625 L 6.84375 14.1875 L 8 14.90625 L 8.59375 17 L 11.40625 17 L 12.09375 14.90625 L 13.15625 14.1875 L 15.375 14.65625 L 16.78125 12.34375 L 15.25 10.6875 L 15.25 9.3125 L 16.78125 7.65625 L 15.375 5.34375 L 13.15625 5.8125 L 12.09375 5.09375 L 11.40625 3 L 8.59375 3 z M 10 7.5 C 11.380712 7.5 12.5 8.6192881 12.5 10 C 12.5 11.380712 11.380712 12.5 10 12.5 C 8.6192881 12.5 7.5 11.380712 7.5 10 C 7.5 8.6192881 8.6192881 7.5 10 7.5 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg
new file mode 100755
index 0000000..5266630
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#e33" d="M 7.1837924,11.307953 C 7.6707878,10.353408 8.2243075,9.2777656 8.6673693,8.1977207 l 0,0 0.1750865,-0.4261233 C 8.2638361,5.5694562 7.9167872,3.8015945 8.2268175,2.65879 l 0,0 C 8.3103144,2.3606956 8.6554508,2.1799563 9.0244582,2.1799563 l 0,0 0.2246724,0.0031 0.041496,0 c 0.5051971,-0.00754 0.7430344,0.6351036 0.7700294,0.8848773 l 0,0 c 0.04457,0.4160895 -0.1480415,1.1202107 -0.1480415,1.1202107 l 0,0 c 0,-0.2842813 0.011293,-0.7436667 -0.1681885,-1.1402846 l 0,0 C 9.5354439,2.5891118 9.3358716,2.3148707 9.1570283,2.2715686 l 0,0 C 9.0667026,2.3318431 8.9787995,2.4566961 8.9486794,2.69706 l 0,0 c -0.062153,0.337009 -0.080934,0.7625005 -0.080934,0.9815213 l 0,0 c 0,0.7750507 0.1524795,1.7973568 0.4524699,2.8516732 l 0,0 C 9.376732,6.3670176 9.4262491,6.2102008 9.4658631,6.0633393 l 0,0 C 9.5273333,5.831768 9.9183329,4.2967327 9.9183329,4.2967327 l 0,0 c 0,0 -0.098522,2.0433649 -0.2359592,2.6615218 l 0,0 c -0.029539,0.130453 -0.062152,0.2598125 -0.095963,0.3922291 l 0,0 c 0.4945263,1.3812802 1.2909033,2.613824 2.2410503,3.5012084 l 0,0 c 0.374662,0.350187 0.847839,0.632591 1.295924,0.889897 l 0,0 c 0.977747,-0.140017 1.878312,-0.205837 2.629514,-0.197674 l 0,0 c 0.996584,0.01322 1.728324,0.160674 2.024539,0.452468 l 0,0 c 0.144967,0.141893 0.203958,0.313158 0.222161,0.505196 l 0,0 c 0.0046,0.07457 -0.03192,0.250406 -0.04265,0.294341 l 0,0 c 0.01063,-0.0533 0.01063,-0.315665 -0.789481,-0.571091 l 0,0 c -0.630087,-0.201452 -1.809285,-0.195167 -3.224454,-0.04454 l 0,0 c 1.636707,0.800785 3.231353,1.198664 3.736549,0.960177 l 0,0 c 0.123621,-0.06024 0.273628,-0.265462 0.273628,-0.265462 l 0,0 c 0,0 -0.08911,0.404778 -0.153163,0.505805 l 0,0 c -0.08162,0.109794 -0.241612,0.229069 -0.393496,0.26923 l 0,0 c -0.79828,0.212748 -2.875529,-0.279901 -4.686694,-1.314763 l 0,0 C 10.696554,12.63337 8.4743315,13.183748 6.69329,13.768015 l 0,0 c -1.7505467,3.067553 -3.0665588,4.476442 -4.1371905,3.940501 l 0,0 -0.3934914,-0.197673 C 2.0026124,17.419141 1.9780925,17.196419 2.0150773,17.015058 l 0,0 C 2.139895,16.40444 2.9055885,15.484427 4.443769,14.566287 l 0,0 c 0.1656275,-0.100408 0.9030766,-0.490141 0.9030766,-0.490141 l 0,0 c 0,0 -0.5459891,0.528424 -0.6740006,0.631965 l 0,0 c -1.2275229,1.005988 -2.1337362,2.2718 -2.1111425,2.762564 l 0,0 0.00437,0.04265 c 1.0430672,-0.148719 2.6069697,-2.271187 4.6177021,-6.205417 m 0.6369822,0.326336 C 7.4850166,12.266842 7.156801,12.852992 6.8536863,13.391448 l 0,0 C 8.5299255,12.689213 10.33419,12.239865 12.051848,11.920429 l 0,0 c -0.23094,-0.159484 -0.454977,-0.328215 -0.665855,-0.506443 l 0,0 C 10.440248,10.613209 9.7191732,9.6141206 9.196409,8.562942 l 0,0 C 8.8650521,9.4559636 8.4709445,10.40486 7.8207804,11.634266"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg
new file mode 100755
index 0000000..e25cded
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M3 3v14h14V6l-3-3zm2 2h4v3h2V5h2l2 2v8H5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg
new file mode 100755
index 0000000..dd955fc
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M6 4l9 6-9 6z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg
new file mode 100755
index 0000000..34f1f45
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M 8.59375 3 L 8 5.09375 L 6.84375 5.8125 L 4.625 5.34375 L 3.21875 7.65625 L 4.84375 9.3125 L 4.84375 10.6875 L 3.21875 12.34375 L 4.625 14.65625 L 6.84375 14.1875 L 8 14.90625 L 8.59375 17 L 11.40625 17 L 12.09375 14.90625 L 13.15625 14.1875 L 15.375 14.65625 L 16.78125 12.34375 L 15.25 10.6875 L 15.25 9.3125 L 16.78125 7.65625 L 15.375 5.34375 L 13.15625 5.8125 L 12.09375 5.09375 L 11.40625 3 L 8.59375 3 z M 10 7.5 C 11.380712 7.5 12.5 8.6192881 12.5 10 C 12.5 11.380712 11.380712 12.5 10 12.5 C 8.6192881 12.5 7.5 11.380712 7.5 10 C 7.5 8.6192881 8.6192881 7.5 10 7.5 z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg
new file mode 100755
index 0000000..66bcac7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M3 2v16h14V6l-4-4zm2 2h7l3 3v9H5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg
new file mode 100755
index 0000000..4ca3ec2
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M2 3v14h16V5h-8L8 3H2zm14 4v8H8l8-8z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg
new file mode 100755
index 0000000..e114689
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M9 4l-6 6 6 6 1.4-1.4L6.8 11H16V9H6.8l3.6-3.6z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg
new file mode 100755
index 0000000..3e971cf
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M2 3v14h16V5h-8L8 3z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg
new file mode 100755
index 0000000..e754e82
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M8 8l3 4.712L13 11l4 5H3zm8-2a2 2 0 1 1-4 0 2 2 0 1 1 4 0z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg
new file mode 100755
index 0000000..d5c0dc9
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M4 3v2h12V3zm0 4v2h8V7zm0 4v2h12v-2zm0 4v2h6v-2z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg
new file mode 100755
index 0000000..dd955fc
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M6 4l9 6-9 6z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg
new file mode 100755
index 0000000..66bcac7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path fill="#555" d="M3 2v16h14V6l-4-4zm2 2h7l3 3v9H5z"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg
new file mode 100755
index 0000000..3275e21
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M20 11h-12.17l5.59-5.59-1.42-1.41-8 8 8 8 1.41-1.41-5.58-5.59h12.17v-2z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg
new file mode 100755
index 0000000..8dfd404
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg
new file mode 100755
index 0000000..5721c4e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M19 9h-4v-6h-6v6h-4l7 7 7-7zm-14 9v2h14v-2h-14z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg
new file mode 100755
index 0000000..d6d4c78
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg
@@ -0,0 +1,5 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
+ <g transform="translate(0,-8)">
+ <path d="m15.8 22.3h-0.8l-0.3-0.3c1-1.1 1.6-2.6 1.6-4.2 0-3.6-2.9-6.5-6.5-6.5-3.6 0-6.5 2.9-6.5 6.5 0 3.6 2.9 6.5 6.5 6.5 1.6 0 3.1-0.6 4.2-1.6l0.3 0.3v0.8l5 5 1.5-1.5-5-5zm-6 0c-2.5 0-4.5-2-4.5-4.5 0-2.5 2-4.5 4.5-4.5 2.5 0 4.5 2 4.5 4.5 0 2.5-2 4.5-4.5 4.5z" fill="#555"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg
new file mode 100755
index 0000000..ebc0e5c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
+ <path d="M 12 2 C 6.48 2 2 6.48 2 12 C 2 17.52 6.48 22 12 22 C 17.52 22 22 17.52 22 12 C 22 6.48 17.52 2 12 2 z M 11 7 L 13 7 L 13 9 L 11 9 L 11 7 z M 11 11 L 13 11 L 13 17 L 11 17 L 11 11 z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg
new file mode 100755
index 0000000..a17415e
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg
@@ -0,0 +1,6 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="296" height="76" version="1.1">
+ <g transform="translate(782.29881,-654.4062)">
+ <path d="m-618.9 654.6c-1.8 0-3.5 1.4-3.9 3.1L-634.2 707.6c-0.4 1.7 0.7 3.1 2.4 3.1l8.2 0c1.7 0 3.5-1.4 3.9-3.1L-616.9 695.5c0.4-1.7 2.1-3.1 3.9-3.1l2.3 0c10 0 17.7-2 23.3-6.1 5.5-4.1 8.3-9.5 8.3-16.2 0-2.9-0.5-5.4-1.6-7.3-1-2-2.6-3.6-4.5-4.8-2-1.2-4.4-2.1-7.1-2.6-2.7-0.5-5.9-0.7-9.6-0.7l-17.1 0zm115.3 0.3 0 2.3-0.9 0 0 1.1 0.9 0 0 4.2c0 1 0.2 1.7 0.6 2.1 0.4 0.4 1 0.7 1.8 0.7 0.2 0 0.5 0 0.8-0.1 0.3 0 0.6-0.1 0.8-0.2l0-1.2-0.1 0c-0.1 0-0.3 0.1-0.5 0.2-0.2 0.1-0.5 0.1-0.7 0.1-0.4 0-0.6-0.1-0.8-0.2-0.2-0.1-0.3-0.2-0.4-0.4-0.1-0.2-0.2-0.4-0.2-0.7 0-0.2 0-0.6 0-1l0-3.6 2.8 0 0-1.1-2.7 0 0-2.3-1.3 0zm-17 0.1c-1.7 0-3.4 1.3-3.8 2.9 0 0.1 0 0.1-0.1 0.2 0 0-0.2 0.8-0.5 2.2l-10 45.4c-0.2 1-0.4 1.7-0.4 1.9l0 0c-0.3 1.6 0.6 2.9 2.2 3l0 0 7.6 0c1.7 0 3.3-1.3 3.8-2.9 0-0.1 0.1-0.1 0.1-0.2l10.9-49.4c0.4-1.7-0.7-3.1-2.5-3.1l-7.3 0c0 0 0 0 0 0zm26.6 2c-0.5 0-0.9 0.1-1.3 0.3-0.4 0.2-0.8 0.5-1.2 0.8l0-0.9-1.3 0 0 7.9 1.3 0 0-5.9c0.4-0.3 0.7-0.5 1.1-0.7 0.4-0.2 0.7-0.2 1.1-0.2 0.4 0 0.7 0.1 0.9 0.2 0.2 0.1 0.4 0.2 0.5 0.4 0.1 0.2 0.2 0.5 0.2 0.8 0 0.3 0 0.6 0 1l0 4.5 1.3 0 0-5.1c0-0.1 0-0.3 0-0.4 0-0.1 0-0.3-0.1-0.4 0.4-0.3 0.8-0.5 1.1-0.7 0.4-0.2 0.7-0.3 1.1-0.3 0.4 0 0.7 0.1 0.9 0.2 0.2 0.1 0.4 0.3 0.5 0.5 0.1 0.2 0.2 0.4 0.2 0.8 0 0.3 0 0.6 0 1l0 4.5 1.3 0 0-5.2c0-0.9-0.2-1.7-0.6-2.2-0.4-0.5-1.1-0.8-1.9-0.8-0.5 0-1 0.1-1.4 0.3-0.4 0.2-1 0.5-1.5 1-0.2-0.4-0.5-0.7-0.8-0.9-0.4-0.2-0.8-0.3-1.4-0.3zm-112.8 8 2.7 0c3.1 0 5.5 0.5 7.1 1.6 1.6 1.1 2.3 2.7 2.3 4.9 0 3.3-1.2 5.9-3.7 7.7-2.4 1.8-5.9 2.7-10.3 2.7l-2 0c-1.8 0-2.9-1.4-2.5-3.1l2.4-10.6c0.4-1.7 2.1-3.1 3.9-3.1zm50.8 2.2c-3.3 0-6.6 0.3-9.9 0.8-2.4 0.4-2.7 0.4-4.2 0.8-3.1 0.7-3.6 3.8-3.6 3.8l-1 4.1c-0.6 2.6 0.9 2.5 1.6 2.3 1.4-0.4 2.1-0.8 4.8-1.4 2.6-0.6 5.4-1 7.7-1 3.3 0 5.7 0.3 7.4 1 1.6 0.7 2.5 1.9 2.5 3.7 0 0.4 0 0.8-0.1 1.2-0.1 0.3-0.4 0.6-1.2 0.8-4.7 0.3-8 0.7-12 1.3-4 0.6-7.4 1.5-10.3 2.8-3.1 1.4-5.4 3.2-7 5.5-1.6 2.3-2.3 5.2-2.3 8.5 0 3.2 1.1 5.7 3.3 7.7 2.2 2 5.1 2.9 8.6 2.9 2.2 0 3.9-0.2 5.1-0.5 1.2-0.3 2.5-0.7 3.9-1.3 1-0.4 2.2-1.1 3.4-1.9 1.2-0.8 2-1.3 3.1-2l0 0.1-0.3 1.3c0 0 0 0 0 0l0 0c-0.3 1.6 0.6 2.9 2.2 3l0 0 0.1 0c1 0 4.6 0 6.3 0l1.2 0c0.1 0 0.1 0 0.1 0 1.6-0.2 3.1-1.5 3.5-3.1l6-25.7c0.1-0.6 0.2-1.3 0.3-2.1 0.1-0.8 0.2-1.5 0.1-1.9 0-3.6-1.5-6.3-4.6-8.1-3.1-1.7-7.9-2.6-14.6-2.6zm2.8 23.6c0.3 0 0.4 0.1 0.3 1-0.1 0.5-1.1 4.9-1.6 6.9-0.1 0.6-1 1.5-1.3 1.7-1 0.6-2.1 1.2-3.2 1.6-1.5 0.6-2.9 0.9-4.2 0.9-2 0-3.6-0.3-4.6-0.9-1.1-0.6-1.6-1.6-1.6-3 0-1.7 0.4-3 1.2-4 0.8-1 2-1.8 3.5-2.4 1.5-0.5 3.3-0.9 5.4-1.2 1.9-0.2 5.5-0.7 6-0.7 0.1 0 0.2 0 0.3 0z" fill="#369"/>
+ <path d="m-749.8 654.4-17 0c-1.8 0-3.5 1.4-3.9 3.1l-11.5 49.9c-0.4 1.7 0.7 3.1 2.5 3.1l8.2 0c1.8 0 3.5-1.4 3.9-3.1l2.8-12.1c0.4-1.7 2.1-3.1 3.9-3.1l2.3 0c10 0 17.7-2 23.3-6.1 5.5-4.1 8.3-9.5 8.3-16.2 0-2.9-0.5-5.4-1.6-7.3-1-2-2.5-3.6-4.5-4.8-2-1.2-4.3-2.1-7.1-2.6-2.7-0.5-6-0.7-9.6-0.8zm-4.8 10.4 2.7 0c3.1 0 5.5 0.5 7.1 1.6 1.6 1 2.4 2.7 2.4 4.8 0 3.3-1.2 5.9-3.7 7.7-2.5 1.8-5.9 2.7-10.3 2.7l-2 0c-1.8 0-2.9-1.4-2.5-3.1l2.5-10.6c0.4-1.7 2.1-3.1 3.9-3.1zm50.7 2.3c-3.3 0-6.6 0.2-9.9 0.8-2.4 0.4-2.6 0.5-4.2 0.8-3.1 0.7-3.6 3.8-3.6 3.8l-1 4.1c-0.6 2.6 0.9 2.5 1.6 2.3 1.3-0.4 2.1-0.8 4.8-1.4 2.6-0.6 5.4-1 7.7-1 3.3 0 5.8 0.4 7.4 1.1 1.7 0.7 2.4 1.9 2.4 3.7 0 0.4 0 0.8-0.1 1.2-0.1 0.3-0.4 0.6-1.2 0.8-4.6 0.3-8 0.7-12 1.3-4 0.6-7.4 1.5-10.3 2.8-3.1 1.4-5.4 3.2-7 5.5-1.6 2.3-2.3 5.2-2.3 8.5 0 3.2 1.1 5.8 3.3 7.8 2.2 2 5.1 2.9 8.6 2.9 2.2 0 3.9-0.2 5.1-0.5 1.2-0.3 2.5-0.7 3.9-1.3 1-0.4 2.2-1.1 3.4-1.9 1.2-0.8 2-1.3 3.1-2l0 0.1-0.3 1.3c0 0 0 0 0 0-0.3 1.6 0.6 2.9 2.2 3.1l0 0 0.1 0c1 0 4.6 0 6.3 0l1.2 0c0.1 0 0.1 0 0.1-0.1 1.6-0.2 3.1-1.5 3.5-3l5.9-25.7c0.1-0.6 0.3-1.3 0.3-2.1 0.1-0.8 0.1-1.5 0.1-1.9 0-3.6-1.5-6.3-4.6-8.1-3.1-1.7-7.9-2.6-14.6-2.6zm60.2 0.6c-1.7 0-4 1.4-5.1 3.1 0 0-11.7 20-12.8 22-0.6 1.1-1.2 0.4-1.3 0-0.1-0.5-3.6-21.9-3.6-21.9-0.4-1.7-2.2-3.2-4.4-3.2l-7.3 0c-1.8 0-2.9 1.4-2.5 3.1 0 0 5.6 31.5 6.7 39 0.5 4.1-0.1 4.8-0.1 4.8l-7.2 12.6c-1.1 1.7-0.5 3.1 1.3 3.1l8.4 0c1.7 0 4.1-1.4 5.1-3.1l32.5-54.9c0 0 3.1-4.7 0.2-4.7-2 0-9.8 0-9.8 0zM-701.4 690.8c0.5 0 0.8-0.3 0.6 1-0.1 0.5-1.1 4.9-1.6 6.9-0.1 0.6-0.9 1.5-1.3 1.7-1 0.6-2.1 1.2-3.2 1.7-1.5 0.6-2.9 0.9-4.2 0.9-2 0-3.6-0.3-4.6-0.9-1.1-0.6-1.6-1.6-1.6-3 0-1.7 0.4-3 1.2-4 0.8-1 2-1.8 3.5-2.3 1.5-0.5 3.3-0.9 5.4-1.2 1.9-0.2 5.5-0.7 6-0.7z" fill="#1c3664"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg
new file mode 100755
index 0000000..ef5f8a0
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M19 6.4l-1.4-1.4-5.6 5.6-5.6-5.6-1.4 1.4 5.6 5.6-5.6 5.6 1.4 1.4 5.6-5.6 5.6 5.6 1.4-1.4-5.6-5.6z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg
new file mode 100755
index 0000000..bf04ad7
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M7 14h-2v5h5v-2h-3v-3zm-2-4h2v-3h3v-2h-5v5zm12 7h-3v2h5v-5h-2v3zm-3-12v2h3v3h2v-5h-5z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg
new file mode 100755
index 0000000..1b72100
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg
new file mode 100755
index 0000000..d2a3efb
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M5 16h3v3h2v-5h-5v2zm3-8h-3v2h5v-5h-2v3zm6 11h2v-3h3v-2h-5v5zm2-11v-3h-2v5h5v-2h-3z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg
new file mode 100755
index 0000000..a592b22
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M14.6 18 16 16.6 11.4 12 16 7.4 14.6 6l-6 6z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg
new file mode 100755
index 0000000..7a8a69d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M19 9h-4v-6h-6v6h-4l7 7 7-7zm-14 9v2h14v-2h-14z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg
new file mode 100755
index 0000000..d6d4c78
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg
@@ -0,0 +1,5 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1">
+ <g transform="translate(0,-8)">
+ <path d="m15.8 22.3h-0.8l-0.3-0.3c1-1.1 1.6-2.6 1.6-4.2 0-3.6-2.9-6.5-6.5-6.5-3.6 0-6.5 2.9-6.5 6.5 0 3.6 2.9 6.5 6.5 6.5 1.6 0 3.1-0.6 4.2-1.6l0.3 0.3v0.8l5 5 1.5-1.5-5-5zm-6 0c-2.5 0-4.5-2-4.5-4.5 0-2.5 2-4.5 4.5-4.5 2.5 0 4.5 2 4.5 4.5 0 2.5-2 4.5-4.5 4.5z" fill="#555"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg
new file mode 100755
index 0000000..50ac249
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M9 16.2l-4.2-4.2-1.4 1.4 5.6 5.6 12-12-1.4-1.4z" fill="#fff"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg
new file mode 100755
index 0000000..4e38c05
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M3 18h18v-2h-18v2zm0-5h18v-2h-18v2zm0-7v2h18v-2h-18z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg
new file mode 100755
index 0000000..5b0ed8d
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M18 9.7 16.6 8.3 12 12.9 7.4 8.3 6 9.7l6 6z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg
new file mode 100755
index 0000000..a5f7a7b
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white">
+ <path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/>
+ <path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z">
+ <animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite" />
+ </path>
+</svg>
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg
new file mode 100755
index 0000000..8dfd404
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1">
+ <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg
new file mode 100755
index 0000000..9914792
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M4 3 4 6 7 6 7 3zm5 0 0 3 8 0 0-3zm-3 5 0 3 3 0 0-3zm5 0 0 3 9 0 0-3zm-5 5 0 3 3 0 0-3zm5 0 0 3 6 0 0-3zm-5 5 0 3 3 0 0-3zm5 0 0 3 8 0 0-3z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg
new file mode 100755
index 0000000..5e756e0
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="m4 4 0 4 16 0 0-4zm0 6 0 4 16 0 0-4zm0 6 0 4 16 0 0-4z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg
new file mode 100755
index 0000000..8f4c48c
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="m4 4 0 4 7 0 0-4zm9 0 0 4 7 0 0-4zm-9 6 0 4 7 0 0-4zm9 0 0 4 7 0 0-4zm-9 6 0 4 7 0 0-4zm9 0 0 4 7 0 0-4z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg
new file mode 100755
index 0000000..8601293
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg
@@ -0,0 +1,3 @@
+<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24">
+ <path d="m4 4 0 7 7 0 0-7zm9 0 0 7 7 0 0-7zm-9 9 0 7 7 0 0-7zm9 0 0 7 7 0 0-7z" fill="#555"/>
+</svg>
\ No newline at end of file
diff --git a/container/srv-http/root/srv/_h5ai/public/index.php b/container/srv-http/root/srv/_h5ai/public/index.php
new file mode 100755
index 0000000..89f99e8
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/index.php
@@ -0,0 +1,17 @@
+<?php
+
+define('H5AI_VERSION', '0.29.2');
+define('MIN_PHP_VERSION', '5.5.0');
+
+if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<')) {
+ header('Content-type: text/plain;charset=utf-8');
+ exit('[ERR] h5ai requires PHP ' . MIN_PHP_VERSION . ' or later, but found PHP ' . PHP_VERSION);
+}
+
+if (substr(H5AI_VERSION, 0, 1) === '{') {
+ header('Content-type: text/plain;charset=utf-8');
+ exit('[ERR] h5ai sources must be preprocessed to work correctly');
+}
+
+require_once __DIR__ . '/../private/php/class-bootstrap.php';
+Bootstrap::run();
diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
new file mode 100755
index 0000000..664fd61
--- /dev/null
+++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
@@ -0,0 +1,5 @@
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
+!function(e){function t(e,t){if(!t)throw i.className=r,new Error(r+": "+e)}function n(e){return"function"==typeof e}if(!e||e.window!==e||!e.document)throw new Error("no-window");var r="no-browser",i=e.document.documentElement;i.className="",t("console",e.console&&n(e.console.log)),t("assign",e.Object&&n(e.Object.assign)),t("promise",n(e.Promise)),t("xhr",e.XMLHttpRequest)}(this),function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";n(1)},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=r.awaitReady,a=n(7),s=i("script[data-module]").attr("data-module"),c={action:"get",setup:!0,options:!0,types:!0};if("index"===s)c.theme=!0,c.langs=!0;else{if("info"!==s)throw new Error("no-main-module: '"+s+"'");c.refresh=!0}a._update(c).then(function(){return o()}).then(function(){return n(9)("./"+s)})},function(e,t,n){"use strict";e.exports=Object.assign({},n(3),n(4),n(5),n(6))},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e){return void 0!==e&&null!==e},i=function(e,t){return("undefined"==typeof e?"undefined":n(e))===t},o=function(e){return i(e,"string")},a=function(e){return i(e,"function")},s=function(e){return i(e,"number")},c=function(e){return e&&e.hasOwnProperty("length")},u=function(e){return!e||o(e)?[]:(c(e)&&(e=Array.from(e)),Object.keys(e))},l=function(e){return u(e).map(function(t){return e[t]})},f=function(e,t){return u(e).forEach(function(n){return t(e[n],n)})},d=function(e,t){return l(e).filter(t)},p=function(e,t){return l(e).map(t)},h=function(e,t){return l(e).indexOf(t)>=0},g=function(e){return d(e,function(e){return!!e})},m=function(e,t){return!!e&&e instanceof t},v=function(e){return Array.from(e)},b=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)<0})},w=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)>=0})},y=function(e,t){return e<t?-1:e>t?1:0},x=function(e,t){var n=a(t)?t:function(e){return e[t]},r=function(e,t){return y(n(e),n(t))};return l(e).sort(r)},k=function(e,t){var n=null;return function(){clearTimeout(n),n=setTimeout(e,t)}};e.exports={is:r,isStr:o,isFn:a,isNum:s,hasLength:c,keys:u,values:l,each:f,filter:d,map:p,includes:h,compact:g,isInstanceOf:m,toArray:v,difference:b,intersection:w,cmp:y,sortBy:x,debounce:k}},function(e,t,n){(function(t){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=n(3),a=o.each,s=o.filter,c=o.hasLength,u=o.is,l=o.isStr,f=o.map,d=o.isInstanceOf,p=o.toArray,h=t.window,g=h.document,m=function(){var e=function(e){return g.createElement(e)},t=[[/^<t(head|body|foot)|^<c(ap|olg)/i,e("table")],[/^<col/i,e("colgroup")],[/^<tr/i,e("tbody")],[/^<t[dh]/i,e("tr")]],n=e("div"),r=function(e){var r=!0,o=!1,a=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done);r=!0){var u=s.value,l=i(u,2),f=l[0],d=l[1];if(f.test(e))return d}}catch(e){o=!0,a=e}finally{try{!r&&c.return&&c.return()}finally{if(o)throw a}}return n};return function(e){var t=r(e);t.innerHTML=e;var n=p(t.childNodes);return a(n,function(e){return t.removeChild(e)}),t.innerHTML="",n}}(),v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;try{return p(t.querySelectorAll(e))}catch(e){return[]}},b=function(e){return d(e,h.Element)},w=function(e){return d(e,h.Document)},y=function(e){return u(e)&&e.window===e&&w(e.document)},x=function(e){return b(e)||w(e)||y(e)},k=function(e,t,n){return e.addEventListener(t,n)},_=function(e,t,n){return e.removeEventListener(t,n)},C=new Promise(function(e){/^(i|c|loade)/.test(g.readyState)?e():k(g,"DOMContentLoaded",function(){return e()})}),S=function(){return C},A=new Promise(function(e){k(h,"load",function(){return e()})}),T=function(){return A},E=function e(t){if(d(t,e))return t;var n=void 0;return l(t)?(t=t.trim(),n="<"===t[0]?m(t):v(t)):n=x(t)?[t]:c(t)?t:[t],n=s(n,x),Object.assign(Object.create(e.prototype),n,{length:n.length})};E.prototype={constructor:E,each:function(e){return a(this,e),this},map:function(e){return f(this,e)},find:function(e){var t;return E((t=[]).concat.apply(t,r(this.map(function(t){return v(e,t)}))))},on:function(e,t){return this.each(function(n){return k(n,e,t)})},off:function(e,t){return this.each(function(n){return _(n,e,t)})},attr:function(e,t){return void 0===t?this.length?this[0].getAttribute(e):void 0:this.each(function(n){return n.setAttribute(e,t)})},rmAttr:function(e){return this.each(function(t){return t.removeAttribute(e)})},prop:function(e,t){return void 0===t?this.length?this[0][e]:void 0:this.each(function(n){n[e]=t})},rmProp:function(e){return this.each(function(t){return delete t[e]})},val:function(e){return void 0===e?this.length?this[0].value:void 0:this.each(function(t){t.value=e})},html:function(e){return void 0===e?this.map(function(e){return e.innerHTML}).join(""):this.each(function(t){t.innerHTML=e})},text:function(e){return void 0===e?this.map(function(e){return e.textContent}).join(""):this.each(function(t){t.textContent=e})},clr:function(){return this.html("")},rm:function(){return this.each(function(e){var t=e.parentNode;t&&t.removeChild(e)})},rpl:function(e){return this.each(function(t){var n=t.parentNode;n&&n.replaceChild(E(e)[0],t)})},app:function(e){return this.each(function(t){E(e).each(function(e){return t.appendChild(e)})})},appTo:function(e){return E(e).app(this),this},pre:function(e){return this.each(function(t){E(e).each(function(e){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)})})},preTo:function(e){return E(e).pre(this),this},cls:function(){return arguments.length?(this.each(function(e){e.className=""}),this.addCls.apply(this,arguments)):this.length?p(this[0].classList):[]},hasCls:function(e){return p(this).every(function(t){return t.classList.contains(e)})},addCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},rmCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.remove(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},tglCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.contains(s)?e.classList.remove(s):e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},parent:function(){return E(this.map(function(e){return e.parentNode}))},children:function(){var e;return E((e=[]).concat.apply(e,r(this.map(function(e){return p(e.children)}))))},hide:function(){return this.addCls("hidden")},show:function(){return this.rmCls("hidden")},isHidden:function(){return this.hasCls("hidden")},css:function(e){return this.each(function(t){return Object.assign(t.style,e)})}},e.exports={awaitReady:S,awaitLoad:T,dom:E}}).call(t,function(){return this}())},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,o=/^0x[0-9a-f]+$/i,a=/^0/,s=function(e,t){var s=String(e).trim(),c=String(t).trim(),u=s.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),l=c.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),f=parseInt(s.match(o),16)||1!==u.length&&s.match(i)&&Date.parse(s),d=parseInt(c.match(o),16)||f&&c.match(i)&&Date.parse(c)||null;if(d){if(f<d)return-1;if(f>d)return 1}for(var p=0,h=Math.max(u.length,l.length);p<h;p+=1){var g=!(u[p]||"").match(a)&&parseFloat(u[p])||u[p]||0,m=!(l[p]||"").match(a)&&parseFloat(l[p])||l[p]||0;if(isNaN(g)!==isNaN(m))return isNaN(g)?1:-1;if(("undefined"==typeof g?"undefined":n(g))!==("undefined"==typeof m?"undefined":n(m))&&(g=String(g),m=String(m)),g<m)return-1;if(g>m)return 1}return 0};e.exports={naturalCmp:s}},function(e,t){"use strict";var n=function(e){return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g,"\\$&")},r=function(e,t){return t?"re:"===e.substr(0,3)?e.substr(3):e.trim().split(/\s+/).map(function(e){return e.split("").map(function(e){return n(e)}).join(".*?")}).join("|"):n(e)};e.exports={parsePattern:r}},function(e,t,n){"use strict";var r=n(8),i=r.request,o=e.exports={_update:function(e){return i(e).then(function(e){return Object.assign(o,e)})}}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.dom,a=t.window.XMLHttpRequest,s=function(e){return new Promise(function(t){var n=new a,r=function(){if(n.readyState===a.DONE)try{t(JSON.parse(n.responseText))}catch(e){t({err:e,txt:n.responseText})}};n.open("POST","?",!0),n.onreadystatechange=r,n.setRequestHeader("Content-Type","application/json;charset=utf-8"),n.send(JSON.stringify(e))})},c=function(e){var t=o('<form method="post" action="?" style="display:none;"/>');i(e,function(e,n){o('<input type="hidden"/>').attr("name",n).attr("value",e).appTo(t)}),t.appTo("body"),t[0].submit(),t.rm()};e.exports={request:s,formRequest:c}}).call(t,function(){return this}())},function(e,t,n){function r(e){return n(i(e))}function i(e){return o[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var o={"./index":10,"./index.js":10,"./info":50,"./info.js":50};r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=9},function(e,t,n){(function(e){"use strict";n(11),n(24),n(25),n(26),n(27),n(29),n(30),n(31),n(32),n(34),n(36),n(37),n(44),n(45),n(46),n(47),n(48),n(49);var t=e.window.document.location.href;n(20).setLocation(t,!0)}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(13),c=n(14),u=n(15),l=n(17),f=n(18),d=Object.assign({modeToggle:!1},c.view),p='<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',h='<div id="viewmode-[MODE]" class="button mode">\n <img src="'+s.image("view-[MODE]")+'" alt="viewmode-[MODE]"/>\n </div>',g='<input id="viewmode-size" type="range" min="0" max="0" value="0">',m='<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',v=void 0,b=void 0,w=function(e,t){o("#viewmode-settings .mode").rmCls("active"),o("#viewmode-"+e).addCls("active"),o("#viewmode-size").val(b.indexOf(t)),"next"===d.modeToggle&&(e=v[(v.indexOf(e)+1)%v.length]),o("#viewmode-toggle img").attr("src",s.image("view-"+e))},y=function(){if(!(v.length<2&&b.length<2)){var e=o(p);if(v.length>1&&i(v,function(t){o(h.replace(/\[MODE\]/g,t)).on("click",function(){f.setMode(t)}).appTo(e)}),b.length>1){var t=b.length-1;o(g).attr("max",t).on("input",function(e){return f.setSize(b[e.target.valueAsNumber])}).on("change",function(e){return f.setSize(b[e.target.valueAsNumber])}).appTo(e)}e.appTo(u.$el)}},x=function(){var e=f.getMode(),t=(v.indexOf(e)+1)%v.length,n=v[t];f.setMode(n)},k=function(){d.modeToggle&&v.length>1&&o(m).on("click",x).appTo(l.$toolbar)},_=function(){v=f.getModes(),b=f.getSizes(),y(),k(),w(f.getMode(),f.getSize()),a.sub("view.mode.changed",w)};_()},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.isStr,o=r.isFn,a=r.dom,s={},c=function(e,t){i(e)&&o(t)&&(s[e]||(s[e]=[]),s[e].push(t))},u=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];i(e)&&s[e]&&s[e].forEach(function(t){t.apply(e,n)})};a(t.window).on("resize",function(){return u("resize")}),e.exports={sub:c,pub:u}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.includes,o=n(7),a=n(14),s=a.publicHref+"images/",c=s+"ui/",u=s+"themes/",l=u+"default/",f=["file","folder","folder-page","folder-parent","ar","aud","bin","img","txt","vid","x"],d=function(e){return c+e+".svg"},p=function(e){var t=(e||"").split("-")[0],n=o.theme[e]||o.theme[t];return n?u+n:i(f,e)?l+e+".svg":i(f,t)?l+t+".svg":l+"file.svg"};e.exports={image:d,icon:p}},function(e,t,n){"use strict";var r=n(7);e.exports=Object.assign({},r.options,{publicHref:r.setup.PUBLIC_HREF,rootHref:r.setup.ROOT_HREF})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(13),a=n(14),s=n(16),c=n(17),u=Object.assign({disableSidebar:!1},a.view),l="sidebarIsVisible",f='<div id="sidebar"></div>',d='<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',p=function(){var e=i(f).hide(),t=i(d),n=t.find("img"),r=function(r){var i=s.get(l);r&&(i=!i,s.put(l,i)),i?(t.addCls("active"),n.attr("src",o.image("back")),e.show()):(t.rmCls("active"),n.attr("src",o.image("sidebar")),e.hide())};return u.disableSidebar||(e.appTo(c.$mainrow),t.appTo(c.$toolbar).on("click",function(){return r(!0)}),r()),{$el:e}};e.exports=p()},function(e,t){(function(t){"use strict";var n=t.window.localStorage,r="_h5ai",i=function(){try{return JSON.parse(n[r])}catch(e){}return{}},o=function(e){n[r]=JSON.stringify(e)},a=function(e,t){var n=i();n[e]=t,o(n)},s=function(e){return i()[e]};e.exports={put:a,get:s}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o="body",a='<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',s='<div id="mainrow">\n <div id="content"></div>\n </div>',c=function(){var e=i(o).attr("id","root").clr().app(a).app(s);return{$root:e,$topbar:e.find("#topbar"),$toolbar:e.find("#toolbar"),$flowbar:e.find("#flowbar"),$mainrow:e.find("#mainrow"),$content:e.find("#content")}};e.exports=c()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=r.intersection,c=r.dom,u=n(12),l=n(19),f=n(20),d=n(13),p=n(16),h=n(14),g=n(17),m=["details","grid","icons"],v=[20,40,60,80,100,150,200,250,300,350,400],b=Object.assign({binaryPrefix:!1,hideFolders:!1,hideParentFolder:!1,maxIconSize:40,modes:m,setParentFolderLabels:!1,sizes:v},h.view),w=b.sizes.sort(function(e,t){return e-t}),y=s(b.modes,m),x="view",k='<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',_='<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',C=c(k),S=C.find("#items"),A=C.find("#view-hint"),T=function(e,t,n){return Math.min(n,Math.max(t,e))},E=function(e){var t=T(e,20,80),n=T(e,40,160),r=T(e,80,1e3),i=Math.round(4*r/3),o="!important;",a="#view.view-details.view-size-"+e,s="#view.view-grid.view-size-"+e,c="#view.view-icons.view-size-"+e,u=[a+" .item .label {line-height: "+(t+14)+"px "+o+"}",a+" .item .date {line-height: "+(t+14)+"px "+o+"}",a+" .item .size {line-height: "+(t+14)+"px "+o+"}",a+" .square {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .square img {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .label {margin-left: "+(t+32)+"px "+o+"}",s+" .item .label {line-height: "+n+"px "+o+"}",s+" .square {width: "+n+"px "+o+" height: "+n+"px "+o+"}",s+" .square img {width: "+n+"px "+o+" height: "+n+"px "+o+"}",c+" .item {width: "+i+"px "+o+"}",c+" .landscape {width: "+i+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape img {width: "+r+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape .thumb {width: "+i+"px "+o+"}"];return u.join("\n")},M=function(){var e=o(w,function(e){return E(e)});e.push("#view .icon img {max-width: "+b.maxIconSize+"px; max-height: "+b.maxIconSize+"px;}"),c("<style></style>").text(e.join("\n")).appTo("head")},D=function(e,t){var n=p.get(x);e=e||n&&n.mode,t=t||n&&n.size,e=a(b.modes,e)?e:b.modes[0],t=a(b.sizes,t)?t:b.sizes[0],p.put(x,{mode:e,size:t}),i(y,function(t){t===e?C.addCls("view-"+t):C.rmCls("view-"+t)}),i(w,function(e){e===t?C.addCls("view-size-"+e):C.rmCls("view-size-"+e)}),u.pub("view.mode.changed",e,t)},P=function(){return y},z=function(){return p.get(x).mode},L=function(e){return D(e,null)},$=function(){return w},H=function(){return p.get(x).size},O=function(e){return D(null,e)},B=function(e){var t=e.target._item;u.pub("item.mouseenter",t)},R=function(e){var t=e.target._item;u.pub("item.mouseleave",t)},N=function(e){var t=c(_),n=t.find("a"),r=t.find(".icon img"),i=t.find(".label"),o=t.find(".date"),a=t.find(".size");return t.addCls(e.isFolder()?"folder":"file").on("mouseenter",B).on("mouseleave",R),f.setLink(n,e),i.text(e.label).attr("title",e.label),o.attr("data-time",e.time).text(l.formatDate(e.time)),a.attr("data-bytes",e.size).text(l.formatSize(e.size)),e.icon=d.icon(e.type),e.isFolder()&&!e.isManaged&&(t.addCls("page"),e.icon=d.icon("folder-page")),e.isCurrentParentFolder()&&(e.icon=d.icon("folder-parent"),b.setParentFolderLabels||i.addCls("l10n-parentDirectory"),t.addCls("folder-parent")),r.attr("src",e.icon).attr("alt",e.type),e.$view=t,t[0]._item=e,t},I=function(){var e=S.find(".item").length===S.find(".folder-parent").length;e?A.show():A.hide()},j=function(e){var t=o(S.find(".item"),function(e){return e._item});S.find(".item").rm(),i(e,function(e){return S.app(N(e))}),g.$content[0].scrollLeft=0,g.$content[0].scrollTop=0,I(),u.pub("view.changed",e,t)},F=function(e,t){i(e,function(e){N(e).hide().appTo(S).show()}),i(t,function(e){e.$view.hide().rm()}),I(),u.pub("view.changed",e,t)},q=function(e){A.rmCls().addCls("l10n-"+e),I()},Y=function(e){e||(e=f.getItem());var t=[];e.parent&&!b.hideParentFolder&&t.push(e.parent),i(e.content,function(e){e.isFolder()&&b.hideFolders||t.push(e)}),q("empty"),j(t)},Z=function(e,t,n){var r=[];i(t,function(e){e.isFolder()&&b.hideFolders||r.push(e)}),q("empty"),F(r,n)},U=function(){var e=C[0].offsetWidth;C.rmCls("width-0").rmCls("width-1"),e<320?C.addCls("width-0"):e<480&&C.addCls("width-1")},V=function(){M(),D(),C.appTo(g.$content),A.hide(),l.setDefaultMetric(b.binaryPrefix),u.sub("location.changed",Y),u.sub("location.refreshed",Z),u.sub("resize",U),U()};V(),e.exports={$el:C,setItems:j,changeItems:F,setLocation:Y,setHint:q,getModes:P,getMode:z,setMode:L,getSizes:$,getSize:H,setSize:O}},function(e,t,n){"use strict";var r=n(2),i=r.isNum,o={t:1e3,k:1e3,u:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},a={t:1024,k:1024,u:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},s=o,c=[[/YYYY/,"Y",4],[/YY/,"Y",2],[/Y/,"Y",0],[/MM/,"M",2],[/M/,"M",0],[/DD/,"D",2],[/D/,"D",0],[/HH/,"H",2],[/H/,"H",0],[/mm/,"m",2],[/m/,"m",0],[/ss/,"s",2],[/s/,"s",0]],u="YYYY-MM-DD HH:mm",l=function(e){s=e?a:o},f=function(e,t){if(t=t||s,!i(e)||e<0)return"";for(var n=0,r=t.u.length-1;e>=t.t&&n<r;)e/=t.k,n+=1;return(n<=1?Math.round(e):e.toFixed(1)).toString()+" "+t.u[n]},d=function(e){u=e},p=function(e,t){var n=String(e);return t&&(n=("000"+n).substr(-t)),n},h=function(e,t){if(!e||!i(e))return"";t=t||u;var n=new Date(e),r={Y:n.getFullYear(),M:n.getMonth()+1,D:n.getDate(),H:n.getHours(),m:n.getMinutes(),s:n.getSeconds()};return c.forEach(function(e){t=t.replace(e[0],p(r[e[1]],e[2]))}),t};e.exports={setDefaultMetric:l,formatSize:f,setDefaultDateFormat:d,formatDate:h}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.values,a=r.difference,s=n(8),c=s.request,u=n(14),l=n(12),f=n(21),d=t.window,p=d.document,h=Object.assign({fastBrowsing:!0,unmanagedInNewWindow:!0},u.view),g=h.fastBrowsing?d.history:null,m=/^.*:\/\/[^\/]*|[^\/]*$/g,v=[[/\/+/g,"/"],[/ /g,"%20"],[/!/g,"%21"],[/#/g,"%23"],[/\$/g,"%24"],[/&/g,"%26"],[/'/g,"%27"],[/\(/g,"%28"],[/\)/g,"%29"],[/\*/g,"%2A"],[/\+/g,"%2B"],[/\,/g,"%2C"],[/:/g,"%3A"],[/;/g,"%3B"],[/\=/g,"%3D"],[/\?/g,"%3F"],[/@/g,"%40"],[/\[/g,"%5B"],[/\]/g,"%5D"]],b=null,w=function(e){return v.reduce(function(e,t){return e.replace(t[0],t[1])},e)},y=function(e){return e.replace(m,"")},x=function(){var e="/a b",t=p.createElement("a");return t.href=e,y(t.href)===e}(),k=function(e){var t=p.createElement("a"),n=void 0;return t.href=e,n=y(t.href),x&&(n=encodeURIComponent(n).replace(/%2F/gi,"/")),w(n)},_=function(){return p.domain},C=function(){return b},S=function(){return n(22).get(b)},A=function(){return c({action:"get",items:{href:b,what:1}}).then(function(e){var t=n(22),r=t.get(b);if(e){var o={};i(e.items,function(e){var n=t.get(e);o[n.absHref]=!0}),i(r.content,function(e){o[e.absHref]||t.remove(e.absHref)})}return r})},T=function(){var e=S(),t=o(e.content);l.pub("location.beforeRefresh"),A().then(function(){var n=o(e.content),r=a(n,t),i=a(t,n);l.pub("location.refreshed",e,r,i)})},E=function(e,t){l.pub("location.beforeChange"),e=k(e),b!==e&&(b=e,g&&(t?g.replaceState({absHref:b},"",b):g.pushState({absHref:b},"",b)));var n=S();n.isLoaded?(l.pub("location.changed",n),T()):(f.set("loading..."),A().then(function(){n.isLoaded=!0,f.set(),l.pub("location.changed",n)}))},M=function(e,t){e.attr("href",t.absHref),g&&t.isFolder()&&t.isManaged&&e.on("click",function(e){return E(t.absHref),e.preventDefault(),!1}),h.unmanagedInNewWindow&&!t.isManaged&&e.attr("target","_blank")},D=function(e){e.state&&e.state.absHref&&E(e.state.absHref,!0)};d.onpopstate=g?D:null,e.exports={forceEncoding:w,getDomain:_,getAbsHref:C,getItem:S,setLocation:E,refresh:T,setLink:M}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(17),a=function(){var e=i('<div id="notification"></div>').hide().appTo(o.$root),t=function(t){t?e.html(t).show():e.hide()};return{set:t}};e.exports=a()},function(e,t,n){"use strict";var r=n(2),i=r.keys,o=r.each,a=r.filter,s=r.sortBy,c=r.isStr,u=r.isNum,l=n(8),f=n(20),d=n(14),p=n(23),h=/\/$/,g=/^(.*\/)([^\/]+\/?)$/,m={},v=function(e,t){return c(e)&&e.startsWith(t)},b=function(e){e=e.replace(h,"");try{e=decodeURIComponent(e)}catch(e){}return e},w=function(e){if("/"===e)return{parent:null,name:"/"};var t=g.exec(e);if(!t)return null;var n={parent:t[1],name:t[2]};return n.parent&&!v(n.parent,d.rootHref)&&(n.parent=null),n},y=function(e){if(c(e))e={href:e};else if(!e||!c(e.href))return null;var t=f.forceEncoding(e.href);if(!v(t,d.rootHref))return null;var n=m[t]||_(t);return u(e.time)&&(n.time=e.time),u(e.size)&&(n.size=e.size),e.managed&&(n.isManaged=!0),e.fetched&&(n.isContentFetched=!0),n},x=function e(t){t=f.forceEncoding(t);var n=m[t];n&&(delete m[t],n.parent&&delete n.parent.content[n.absHref],o(n.content,function(t){e(t.absHref)}))},k=function(e){return new Promise(function(t){var n=y(e);n.isContentFetched?t(n):l.request({action:"get",items:{href:n.absHref,what:1}}).then(function(e){e.items&&o(e.items,function(e){y(e)}),t(n)})})},_=function e(t){var n=w(t),r=Object.assign(Object.create(e.prototype),{absHref:t,type:p.getType(t),label:b("/"===t?f.getDomain():n.name),time:null,size:null,parent:null,isManaged:null,content:{}});return m[t]=r,n.parent&&(r.parent=y(n.parent),r.parent.content[r.absHref]=r,i(r.parent.content).length>1&&(r.parent.isContentFetched=!0)),r};_.prototype={constructor:_,isFolder:function(){return h.test(this.absHref)},isCurrentFolder:function(){return this.absHref===f.getAbsHref()},isInCurrentFolder:function(){return!!this.parent&&this.parent.isCurrentFolder()},isCurrentParentFolder:function(){var e=y(f.getAbsHref());return!!e&&this===e.parent},isDomain:function(){return"/"===this.absHref},isRoot:function(){return this.absHref===d.rootHref},isEmpty:function(){return 0===i(this.content).length},fetchContent:function(){return k(this.absHref)},getCrumb:function(){for(var e=this,t=[e];e.parent;)e=e.parent,t.unshift(e);return t},getSubfolders:function(){return s(a(this.content,function(e){return e.isFolder()}),function(e){return e.label.toLowerCase()})},getStats:function(){var e=0,t=0;o(this.content,function(n){n.isFolder()?e+=1:t+=1});for(var n=0,r=this;r.parent;)n+=1,r=r.parent;return{folders:e,files:t,depth:n}}},e.exports={get:y,remove:x}},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=n(7),s=/\/$/,c={},u=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g,"\\$&")},l=function(e){i(e,function(e,t){var n="^("+o(e,function(e){return"("+u(e).replace(/\*/g,".*")+")"}).join("|")+")$";c[t]=new RegExp(n,"i")})},f=function(e){if(s.test(e))return"folder";var t=e.lastIndexOf("/"),n=t>=0?e.substr(t+1):e,r=void 0;return i(c,function(e,t){c[t].test(n)&&(r=t)}),r?r:"file"};l(Object.assign({},a.types)),e.exports={getType:f}},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(20),i=n(14),o=e.window,a=Object.assign({enabled:!1,interval:5e3},i.autorefresh),s=null,c=function(){r.refresh()},u=function(){o.clearTimeout(s)},l=function(){o.clearTimeout(s),s=o.setTimeout(c,a.interval)},f=function(){a.enabled&&(a.interval=Math.max(1e3,a.interval),t.sub("location.beforeChange",u),t.sub("location.beforeRefresh",u),t.sub("location.changed",l),t.sub("location.refreshed",l))};f()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(13),s=n(14),c=Object.assign({enabled:!1},s.contextmenu),u='<div id="cm-overlay"></div>',l='<div class="cm-panel"><ul></ul></div>',f='<li class="cm-sep"></li>',d='<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',p='<li class="cm-label"><span class="cm-text"></span></li>',h=function(e){for(;!e._cmId&&e.parentNode;)e=e.parentNode;return e._cmId},g=function(e){var t=o(u),n=function(n){n.stopPropagation(),n.preventDefault();var r=h(n.target);n.target!==t[0]&&void 0===r||(t.rm(),e(r))};return t.on("contextmenu",n).on("click",n)},m=function(e){var t=o(l),n=t.find("ul"),r=void 0;return i(e,function(e){"-"===e.type?o(f).appTo(n):"l"===e.type?o(p).appTo(n).find(".cm-text").text(e.text):"e"===e.type&&(r=o(d).appTo(n),r[0]._cmId=e.id,r.find(".cm-text").text(e.text),e.icon?r.find(".cm-icon img").attr("src",a.icon(e.icon)):r.find(".cm-icon").addCls("no-icon"))}),t},v=function(e,t,n,r){var i=4;t.css({left:0,top:0,opacity:0}),e.show();var o=e[0].getBoundingClientRect(),a=t[0].getBoundingClientRect(),s=o.left,c=o.top,u=o.width,l=o.height,f=a.width,d=a.height,p=n,h=r;f>u-2*i&&(p=i,f=u-2*i),d>l-2*i&&(h=i,d=l-2*i),p<s+i&&(p=s+i),p+f>s+u-i&&(p=s+u-i-f),h<c+i&&(h=c+i),h+d>c+l-i&&(h=c+l-i-d),t.css({left:p+"px",top:h+"px",width:f+"px",height:d+"px",opacity:1})},b=function(e,t,n,r){var i=g(r),o=m(n);i.hide().app(o).appTo("body"),v(i,o,e,t)},w=function(){if(c.enabled){var e=[{type:"e",id:"e1",text:"testing context menus"},{type:"e",id:"e2",text:"another entry"},{type:"e",id:"e3",text:"one with icon",icon:"folder"},{type:"-"},{type:"e",id:"e4",text:"one with icon",icon:"x"},{type:"e",id:"e5",text:"one with icon",icon:"img"}];o("#view").on("contextmenu",function(t){t.preventDefault(),b(t.pageX,t.pageY,e)})}};w()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(20),c=n(13),u=n(14),l=n(17),f=Object.assign({enabled:!1},u.crumb),d='<div id="crumbbar"></div>',p='<a class="crumb">\n <img class="sep" src="'+c.image("crumb")+'" alt=">"/>\n <span class="label"></span>\n </a>',h='<img class="hint" src="'+c.icon("folder-page")+'" alt="has index page"/>',g=function(e){var t=o(p);return s.setLink(t,e),t.find(".label").text(e.label),e.isCurrentFolder()&&t.addCls("active"),e.isManaged||t.app(o(h)),e._$crumb=t,t[0]._item=e,t},m=function(e){var t=e._$crumb,n=o("#crumbbar");t&&t.parent()[0]===n[0]?(n.children().rmCls("active"),t.addCls("active")):(n.clr(),i(e.getCrumb(),function(e){n.app(g(e))}))},v=function(){f.enabled&&(o(d).appTo(l.$flowbar),a.sub("location.changed",m))};v()},function(e,t,n){"use strict";var r=n(28),i=n(2),o=i.each,a=i.dom,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1},u.custom),f=function(e,t){var n=a("#content-"+t);if(e&&e[t].content){var i=e[t].content;"md"===e[t].type&&(i=r(i)),n.html(i).show()}else n.hide()},d=function(e){s.request({action:"get",custom:e.absHref}).then(function(e){var t=e&&e.custom;o(["header","footer"],function(e){return f(t,e)})})},p=function(){l.enabled&&(a('<div id="content-header"></div>').hide().preTo("#content"),a('<div id="content-footer"></div>').hide().appTo("#content"),c.sub("location.changed",d))};p()},function(e,t,n){(function(t){!function(t){"use strict";function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||b.defaults,this.rules=w.normal,this.options.pedantic?this.rules=w.pedantic:this.options.gfm&&(this.options.tables?this.rules=w.tables:this.rules=w.gfm)}function r(e,t){if(this.options=t||b.defaults,this.links=e,this.rules=y.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=y.pedantic:this.options.gfm&&(this.options.breaks?this.rules=y.breaks:this.rules=y.gfm)}function i(e){this.options=e||b.defaults}function o(){}function a(e){this.tokens=[],this.token=null,this.options=e||b.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new s}function s(){this.seen={}}function c(e,t){if(t){if(c.escapeTest.test(e))return e.replace(c.escapeReplace,function(e){return c.replacements[e]})}else if(c.escapeTestNoEncode.test(e))return e.replace(c.escapeReplaceNoEncode,function(e){return c.replacements[e]});return e}function u(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function l(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=n.source||n,n=n.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function f(e,t,n){if(e){try{var r=decodeURIComponent(u(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!k.test(n)&&(n=d(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}function d(e,t){return x[" "+e]||(/^[^:]+:\/*[^\/]*$/.test(e)?x[" "+e]=e+"/":x[" "+e]=m(e,"/",!0)),e=x[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^\/]*)[\s\S]*/,"$1")+t:e+t}function p(){}function h(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function g(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r;
+return r?"|":" |"}),r=n.split(/ \|/),i=0;if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace(/\\\|/g,"|");return r}function m(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var i=e.charAt(e.length-r-1);if(i!==t||n){if(i===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function v(e,t){if(e.indexOf(t[1])===-1)return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return-1}function b(e,t,r){if("undefined"==typeof e||null===e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof t){r||(r=t,t=null),t=h({},b.defaults,t||{});var i,o,s=t.highlight,u=0;try{i=n.lex(e,t)}catch(e){return r(e)}o=i.length;var l=function(e){if(e)return t.highlight=s,r(e);var n;try{n=a.parse(i,t)}catch(t){e=t}return t.highlight=s,e?r(e):r(null,n)};if(!s||s.length<3)return l();if(delete t.highlight,!o)return l();for(;u<i.length;u++)!function(e){return"code"!==e.type?--o||l():s(e.text,e.lang,function(t,n){return t?l(t):null==n||n===e.text?--o||l():(e.text=n,e.escaped=!0,void(--o||l()))})}(i[u])}else try{return t&&(t=h({},b.defaults,t)),a.parse(n.lex(e,t),t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(t||b.defaults).silent)return"<p>An error occurred:</p><pre>"+c(e.message+"",!0)+"</pre>";throw e}}var w={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:p,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:p,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:p,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};w._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,w._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,w.def=l(w.def).replace("label",w._label).replace("title",w._title).getRegex(),w.bullet=/(?:[*+-]|\d{1,9}\.)/,w.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,w.item=l(w.item,"gm").replace(/bull/g,w.bullet).getRegex(),w.list=l(w.list).replace(/bull/g,w.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+w.def.source+")").getRegex(),w._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",w._comment=/<!--(?!-?>)[\s\S]*?-->/,w.html=l(w.html,"i").replace("comment",w._comment).replace("tag",w._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),w.paragraph=l(w.paragraph).replace("hr",w.hr).replace("heading",w.heading).replace("lheading",w.lheading).replace("tag",w._tag).getRegex(),w.blockquote=l(w.blockquote).replace("paragraph",w.paragraph).getRegex(),w.normal=h({},w),w.gfm=h({},w.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),w.gfm.paragraph=l(w.paragraph).replace("(?!","(?!"+w.gfm.fences.source.replace("\\1","\\2")+"|"+w.list.source.replace("\\1","\\3")+"|").getRegex(),w.tables=h({},w.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),w.pedantic=h({},w.normal,{html:l("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",w._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),n.rules=w,n.lex=function(e,t){var r=new n(t);return r.lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,t){e=e.replace(/^ +$/gm,"");for(var n,r,i,o,a,s,c,u,l,f,d,p,h,v,b,y;e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:m(i,"\n")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2]?i[2].trim():i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d],s.header.length);this.tokens.push(s)}else if(i=this.rules.hr.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"hr"});else if(i=this.rules.blockquote.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"blockquote_start"}),i=i[0].replace(/^ *> ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),o=i[2],v=o.length>1,c={type:"list_start",ordered:v,start:v?+o:"",loose:!1},this.tokens.push(c),i=i[0].match(this.rules.item),u=[],n=!1,h=i.length,d=0;d<h;d++)s=i[d],f=s.length,s=s.replace(/^ *([*+-]|\d+\.) */,""),~s.indexOf("\n ")&&(f-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+f+"}","gm"),"")),d!==h-1&&(a=w.bullet.exec(i[d+1])[0],(o.length>1?1===a.length:a.length>1||this.options.smartLists&&a!==o)&&(e=i.slice(d+1).join("\n")+e,d=h-1)),r=n||/\n\n(?!\s*$)/.test(s),d!==h-1&&(n="\n"===s.charAt(s.length-1),r||(r=n)),r&&(c.loose=!0),b=/^\[[ xX]\] /.test(s),y=void 0,b&&(y=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,"")),l={type:"list_item_start",task:b,checked:y,loose:r},u.push(l),this.tokens.push(l),this.token(s,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(h=u.length,d=0;d<h;d++)u[d].loose=!0;this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(t&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),p=i[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[p]||(this.tokens.links[p]={href:i[2],title:i[3]});else if(t&&(i=this.rules.table.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d].replace(/^ *\| *| *\| *$/g,""),s.header.length);this.tokens.push(s)}else if(i=this.rules.lheading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:"="===i[2]?1:2,text:i[1]});else if(t&&(i=this.rules.paragraph.exec(e)))e=e.substring(i[0].length),this.tokens.push({type:"paragraph",text:"\n"===i[1].charAt(i[1].length-1)?i[1].slice(0,-1):i[1]});else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"text",text:i[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var y={escape:/^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:p,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:p,text:/^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/};y._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",y.em=l(y.em).replace(/punctuation/g,y._punctuation).getRegex(),y._escapes=/\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,y._email=/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,y.autolink=l(y.autolink).replace("scheme",y._scheme).replace("email",y._email).getRegex(),y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,y.tag=l(y.tag).replace("comment",w._comment).replace("attribute",y._attribute).getRegex(),y._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,y._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/,y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,y.link=l(y.link).replace("label",y._label).replace("href",y._href).replace("title",y._title).getRegex(),y.reflink=l(y.reflink).replace("label",y._label).getRegex(),y.normal=h({},y),y.pedantic=h({},y.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:l(/^!?\[(label)\]\((.*?)\)/).replace("label",y._label).getRegex(),reflink:l(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",y._label).getRegex()}),y.gfm=h({},y.normal,{escape:l(y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:l(y.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),y.gfm.url=l(y.gfm.url,"i").replace("email",y.gfm._extended_email).getRegex(),y.breaks=h({},y.gfm,{br:l(y.br).replace("{2,}","*").getRegex(),text:l(y.gfm.text).replace("{2,}","*").getRegex()}),r.rules=y,r.output=function(e,t,n){var i=new r(t,n);return i.output(e)},r.prototype.output=function(e){for(var t,n,i,o,a,s,u="";e;)if(a=this.rules.escape.exec(e))e=e.substring(a[0].length),u+=c(a[1]);else if(a=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(a[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),e=e.substring(a[0].length),u+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):c(a[0]):a[0];else if(a=this.rules.link.exec(e)){var l=v(a[2],"()");if(l>-1){var f=a[2].length-l;a[2]=a[2].substring(0,l),a[0]=a[0].substring(0,a[0].length-f)}e=e.substring(a[0].length),this.inLink=!0,i=a[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i),t?(i=t[1],o=t[3]):o=""):o=a[3]?a[3].slice(1,-1):"",i=i.trim().replace(/^<([\s\S]*)>$/,"$1"),u+=this.outputLink(a,{href:r.escapes(i),title:r.escapes(o)}),this.inLink=!1}else if((a=this.rules.reflink.exec(e))||(a=this.rules.nolink.exec(e))){if(e=e.substring(a[0].length),t=(a[2]||a[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){u+=a[0].charAt(0),e=a[0].substring(1)+e;continue}this.inLink=!0,u+=this.outputLink(a,t),this.inLink=!1}else if(a=this.rules.strong.exec(e))e=e.substring(a[0].length),u+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(e))e=e.substring(a[0].length),u+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(e))e=e.substring(a[0].length),u+=this.renderer.codespan(c(a[2].trim(),!0));else if(a=this.rules.br.exec(e))e=e.substring(a[0].length),u+=this.renderer.br();else if(a=this.rules.del.exec(e))e=e.substring(a[0].length),u+=this.renderer.del(this.output(a[1]));else if(a=this.rules.autolink.exec(e))e=e.substring(a[0].length),"@"===a[2]?(n=c(this.mangle(a[1])),i="mailto:"+n):(n=c(a[1]),i=n),u+=this.renderer.link(i,null,n);else if(this.inLink||!(a=this.rules.url.exec(e))){if(a=this.rules.text.exec(e))e=e.substring(a[0].length),u+=this.inRawBlock?this.renderer.text(a[0]):this.renderer.text(c(this.smartypants(a[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===a[2])n=c(a[0]),i="mailto:"+n;else{do s=a[0],a[0]=this.rules._backpedal.exec(a[0])[0];while(s!==a[0]);n=c(a[0]),i="www."===a[1]?"http://"+n:n}e=e.substring(a[0].length),u+=this.renderer.link(i,null,n)}return u},r.escapes=function(e){return e?e.replace(r.rules._escapes,"$1"):e},r.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i<r;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'<pre><code class="'+this.options.langPrefix+c(r,!0)+'">'+(n?e:c(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:c(e,!0))+"</code></pre>"},i.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},i.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul",i=t&&1!==n?' start="'+n+'"':"";return"<"+r+i+">\n"+e+"</"+r+">\n"},i.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},i.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},i.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},i.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},i.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' align="'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},i.prototype.strong=function(e){return"<strong>"+e+"</strong>"},i.prototype.em=function(e){return"<em>"+e+"</em>"},i.prototype.codespan=function(e){return"<code>"+e+"</code>"},i.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},i.prototype.del=function(e){return"<del>"+e+"</del>"},i.prototype.link=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<a href="'+c(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},i.prototype.image=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},i.prototype.text=function(e){return e},o.prototype.strong=o.prototype.em=o.prototype.codespan=o.prototype.del=o.prototype.text=function(e){return e},o.prototype.link=o.prototype.image=function(e,t,n){return""+n},o.prototype.br=function(){return""},a.parse=function(e,t){var n=new a(t);return n.parse(e)},a.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.inlineText=new r(e.links,h({},this.options,{renderer:new o})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,u(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(i+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});o+=this.renderer.tablerow(n)}return this.renderer.table(i,o);case"blockquote_start":for(o="";"blockquote_end"!==this.next().type;)o+=this.tok();return this.renderer.blockquote(o);case"list_start":o="";for(var a=this.token.ordered,s=this.token.start;"list_end"!==this.next().type;)o+=this.tok();return this.renderer.list(o,a,s);case"list_item_start":o="";var c=this.token.loose;for(this.token.task&&(o+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)o+=c||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(o);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var l='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(l);console.log(l)}},s.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do this.seen[n]++,t=n+"-"+this.seen[n];while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},c.escapeTest=/[&<>"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var x={},k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;p.exec=p,b.options=b.setOptions=function(e){return h(b.defaults,e),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new i,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=a,b.parser=a.parse,b.Renderer=i,b.TextRenderer=o,b.Lexer=n,b.lexer=n.lex,b.InlineLexer=r,b.inlineLexer=r.output,b.Slugger=s,b.parse=b,e.exports=b}(this||("undefined"!=typeof window?window:t))}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(8),s=n(12),c=n(20),u=n(13),l=n(14),f=Object.assign({enabled:!1,type:"php-tar",packageName:"package",alwaysVisible:!1},l.download),d='<div id="download" class="tool">\n <img src="'+u.image("download")+'" alt="download"/>\n </div>',p=[],h=void 0,g=function(e){p=e.slice(0),p.length?h.show():f.alwaysVisible||h.hide()},m=function(){var e=f.type,t=f.packageName,n="shell-zip"===e?"zip":"tar";t||(t=1===p.length?p[0].label:c.getItem().label);var r={action:"download",as:t+"."+n,type:e,baseHref:c.getAbsHref(),hrefs:""};i(p,function(e,t){r["hrefs["+t+"]"]=e.absHref}),a.formRequest(r)},v=function(){f.enabled&&(h=o(d).hide().appTo("#toolbar").on("click",m),f.alwaysVisible&&h.show(),s.sub("selection",g))};v()},function(e,t,n){"use strict";var r=n(2),i=r.filter,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(12),u=n(20),l=n(13),f=n(14),d=n(18),p=Object.assign({enabled:!1,advanced:!1,debounceTime:100,ignorecase:!0},f.filter),h='<div id="filter" class="tool">\n <img src="'+l.image("filter")+'" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',g=!1,m="",v=void 0,b=void 0,w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==m){if(m=e,!e)return void d.setLocation();v.addCls("pending");var t=new RegExp(e,p.ignorecase?"i":""),n=i(u.getItem().content,function(e){return t.test(e.label)});v.rmCls("pending"),d.setHint("noMatch"),d.setItems(n)}},y=function(){g?(v.addCls("active"),b[0].focus(),w(a(b.val(),p.advanced))):(w(),v.rmCls("active"))},x=function(){g=!g,y()},k=function(){g=!1,b.val(""),y()},_=function(){p.enabled&&(v=s(h).appTo("#toolbar"),b=v.find("input"),v.find("img").on("click",x),b.on("keyup",o(y,p.debounceTime)),c.sub("location.changed",k))};_()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.map,i=n(12),o=n(14),a=e.window,s=Object.assign({enabled:!1,id:"UA-000000-0"},o["google-analytics-ua"]),c=function(){!function(e,t,n,r,i,o,a){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src=r,a.parentNode.insertBefore(o,a)}(window,document,"script","//www.google-analytics.com/analytics.js","ga")},u=function(){s.enabled&&(c(),a.ga("create",s.id,"auto"),i.sub("location.changed",function(e){var t=a.location;a.ga("send","pageview",{location:t.protocol+"//"+t.host+e.absHref,title:r(e.getCrumb(),function(e){return e.label}).join(" > ")})}))};u()}).call(t,function(){return this}())},function(e,t,n){(function(e){"use strict";var t=n(33),r=n(2),i=r.isNum,o=r.dom,a=n(12),s=n(19),c=n(13),u=n(14),l=n(16),f=Object.assign({enabled:!1,show:!1,qrcode:!0,qrColor:"#999"},u.info),d='<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',p='<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="'+c.image("info-toggle")+'" alt="view-info"/>\n </div>\n </div>',h="ext/info",g=void 0,m=void 0,v=void 0,b=void 0,w=void 0,y=void 0,x=void 0,k=void 0,_=void 0,C=function(){l.get(h)?(o("#view-info").addCls("active"),o("#info").show()):(o("#view-info").rmCls("active"),o("#info").hide())},S=function(n){var r=n.thumbRational||n.icon,o=!!n.thumbRational;if(!n.isCurrentFolder()&&r||(r=c.icon("folder")),g.attr("src",r),o?g.addCls("thumb"):g.rmCls("thumb"),m.text(n.label),i(n.time)?v.text(s.formatDate(n.time)):v.text("."),i(n.size)?(b.text(s.formatSize(n.size)),b.show()):b.hide(),n.isContentFetched){var a=n.getStats();y.text(a.folders),x.text(a.files),w.show()}else w.hide();if(f.qrcode){var u=e.window.location;k.clr().app(t({render:"image",size:200,fill:f.qrFill,back:f.qrBack,text:u.protocol+"//"+u.host+n.absHref,crisp:!0,quiet:1}))}},A=function(e){S(e)},T=function(){S(_)},E=function(e){_=e,S(_)},M=function(){if(f.enabled){var e=o(d).hide().appTo("#mainrow");g=e.find(".icon img"),m=e.find(".label"),v=e.find(".time"),b=e.find(".size"),w=e.find(".content"),y=e.find(".folders"),x=e.find(".files"),k=e.find(".qrcode"),f.qrcode||k.rm(),o(p).appTo("#sidebar").find("#view-info").on("click",function(e){l.put(h,!l.get(h)),C(),a.pub("resize"),e.preventDefault()}),"boolean"!=typeof l.get(h)&&l.put(h,f.show),C(),a.sub("location.changed",E),a.sub("item.mouseenter",A),a.sub("item.mouseleave",T)}};M()}).call(t,function(){return this}())},function(e,t,n){var r,i,o;!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=n(1),i=r.create_canvas,o=r.canvas_to_img,a=r.dpr,s=n(2),c=n(3),u=n(4);e.exports=function(e){var t=Object.assign({},s,e),n=c(t.text,t.ecLevel,t.minVersion,t.quiet),r=t.ratio||a,l=i(t.size,r),f=l.getContext("2d");return f.scale(r,r),u(n,f,t),"image"===t.render?o(l):l}},function(e,t){"use strict";var n=window,r=n.document,i=n.devicePixelRatio||1,o=function(e){return r.createElement(e)},a=function(e,t){return e.getAttribute(t)},s=function(e,t,n){return e.setAttribute(t,n)},c=function(e,t){var n=o("canvas");return s(n,"width",e*t),s(n,"height",e*t),n.style.width=e+"px",n.style.height=e+"px",n},u=function(e){var t=o("img");return s(t,"crossorigin","anonymous"),s(t,"src",e.toDataURL("image/png")),s(t,"width",a(e,"width")),s(t,"height",a(e,"height")),t.style.width=e.style.width,t.style.height=e.style.height,t};e.exports={create_canvas:c,canvas_to_img:u,dpr:i}},function(e,t){"use strict";e.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(n,a){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=/code length overflow/i,u=function(){var n=function(){function e(t,n){if("undefined"==typeof t.length)throw new Error(t.length+"/"+n);var r=function(){for(var e=0;e<t.length&&0==t[e];)e+=1;for(var r=new Array(t.length-e+n),i=0;i<t.length-e;i+=1)r[i]=t[i+e];return r}(),i={};return i.getAt=function(e){return r[e]},i.getLength=function(){return r.length},i.multiply=function(t){for(var n=new Array(i.getLength()+t.getLength()-1),r=0;r<i.getLength();r+=1)for(var o=0;o<t.getLength();o+=1)n[r+o]^=a.gexp(a.glog(i.getAt(r))+a.glog(t.getAt(o)));return e(n,0)},i.mod=function(t){if(i.getLength()-t.getLength()<0)return i;for(var n=a.glog(i.getAt(0))-a.glog(t.getAt(0)),r=new Array(i.getLength()),o=0;o<i.getLength();o+=1)r[o]=i.getAt(o);for(var o=0;o<t.getLength();o+=1)r[o]^=a.gexp(a.glog(t.getAt(o))+n);return e(r,0).mod(t)},i}var t=function(t,n){var i=236,a=17,l=t,f=r[n],d=null,p=0,g=null,m=new Array,v={},b=function(e,t){p=4*l+17,d=function(e){for(var t=new Array(e),n=0;n<e;n+=1){t[n]=new Array(e);for(var r=0;r<e;r+=1)t[n][r]=null}return t}(p),w(0,0),w(p-7,0),w(0,p-7),k(),x(),C(e,t),l>=7&&_(e),null==g&&(g=T(l,f,m)),S(g,t)},w=function(e,t){for(var n=-1;n<=7;n+=1)if(!(e+n<=-1||p<=e+n))for(var r=-1;r<=7;r+=1)t+r<=-1||p<=t+r||(0<=n&&n<=6&&(0==r||6==r)||0<=r&&r<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=r&&r<=4?d[e+n][t+r]=!0:d[e+n][t+r]=!1)},y=function(){for(var e=0,t=0,n=0;n<8;n+=1){b(!0,n);var r=o.getLostPoint(v);(0==n||e>r)&&(e=r,t=n)}return t},x=function(){for(var e=8;e<p-8;e+=1)null==d[e][6]&&(d[e][6]=e%2==0);for(var t=8;t<p-8;t+=1)null==d[6][t]&&(d[6][t]=t%2==0)},k=function(){for(var e=o.getPatternPosition(l),t=0;t<e.length;t+=1)for(var n=0;n<e.length;n+=1){var r=e[t],i=e[n];if(null==d[r][i])for(var a=-2;a<=2;a+=1)for(var s=-2;s<=2;s+=1)a==-2||2==a||s==-2||2==s||0==a&&0==s?d[r+a][i+s]=!0:d[r+a][i+s]=!1}},_=function(e){for(var t=o.getBCHTypeNumber(l),n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[Math.floor(n/3)][n%3+p-8-3]=r}for(var n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[n%3+p-8-3][Math.floor(n/3)]=r}},C=function(e,t){for(var n=f<<3|t,r=o.getBCHTypeInfo(n),i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<6?d[i][8]=a:i<8?d[i+1][8]=a:d[p-15+i][8]=a}for(var i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<8?d[8][p-i-1]=a:i<9?d[8][15-i-1+1]=a:d[8][15-i-1]=a}d[p-8][8]=!e},S=function(e,t){for(var n=-1,r=p-1,i=7,a=0,s=o.getMaskFunction(t),c=p-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var u=0;u<2;u+=1)if(null==d[r][c-u]){var l=!1;a<e.length&&(l=1==(e[a]>>>i&1));var f=s(r,c-u);f&&(l=!l),d[r][c-u]=l,i-=1,i==-1&&(a+=1,i=7)}if(r+=n,r<0||p<=r){r-=n,n=-n;break}}},A=function(t,n){for(var r=0,i=0,a=0,s=new Array(n.length),c=new Array(n.length),u=0;u<n.length;u+=1){var l=n[u].dataCount,f=n[u].totalCount-l;i=Math.max(i,l),a=Math.max(a,f),s[u]=new Array(l);for(var d=0;d<s[u].length;d+=1)s[u][d]=255&t.getBuffer()[d+r];r+=l;var p=o.getErrorCorrectPolynomial(f),h=e(s[u],p.getLength()-1),g=h.mod(p);c[u]=new Array(p.getLength()-1);for(var d=0;d<c[u].length;d+=1){var m=d+g.getLength()-c[u].length;c[u][d]=m>=0?g.getAt(m):0}}for(var v=0,d=0;d<n.length;d+=1)v+=n[d].totalCount;for(var b=new Array(v),w=0,d=0;d<i;d+=1)for(var u=0;u<n.length;u+=1)d<s[u].length&&(b[w]=s[u][d],w+=1);for(var d=0;d<a;d+=1)for(var u=0;u<n.length;u+=1)d<c[u].length&&(b[w]=c[u][d],w+=1);return b},T=function(e,t,n){for(var r=s.getRSBlocks(e,t),u=c(),l=0;l<n.length;l+=1){var f=n[l];u.put(f.getMode(),4),u.put(f.getLength(),o.getLengthInBits(f.getMode(),e)),f.write(u)}for(var d=0,l=0;l<r.length;l+=1)d+=r[l].dataCount;if(u.getLengthInBits()>8*d)throw new Error("code length overflow. ("+u.getLengthInBits()+">"+8*d+")");for(u.getLengthInBits()+4<=8*d&&u.put(0,4);u.getLengthInBits()%8!=0;)u.putBit(!1);for(;!(u.getLengthInBits()>=8*d)&&(u.put(i,8),!(u.getLengthInBits()>=8*d));)u.put(a,8);return A(u,r)};return v.addData=function(e){var t=u(e);m.push(t),g=null},v.isDark=function(e,t){if(e<0||p<=e||t<0||p<=t)throw new Error(e+","+t);return d[e][t]},v.getModuleCount=function(){return p},v.make=function(){b(!1,y())},v.createTableTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n="";n+='<table style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: "+t+"px;",n+='">',n+="<tbody>";for(var r=0;r<v.getModuleCount();r+=1){n+="<tr>";for(var i=0;i<v.getModuleCount();i+=1)n+='<td style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: 0px;",n+=" width: "+e+"px;",n+=" height: "+e+"px;",n+=" background-color: ",n+=v.isDark(r,i)?"#000000":"#ffffff",n+=";",n+='"/>';n+="</tr>"}return n+="</tbody>",n+="</table>"},v.createImgTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n=v.getModuleCount()*e+2*t,r=t,i=n-t;return h(n,n,function(t,n){if(r<=t&&t<i&&r<=n&&n<i){var o=Math.floor((t-r)/e),a=Math.floor((n-r)/e);
+return v.isDark(a,o)?0:1}return 1})},v};t.stringToBytes=function(e){for(var t=new Array,n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t.push(255&r)}return t},t.createStringToBytes=function(e,t){var n=function(){for(var n=d(e),r=function(){var e=n.read();if(e==-1)throw new Error;return e},i=0,o={};;){var a=n.read();if(a==-1)break;var s=r(),c=r(),u=r(),l=String.fromCharCode(a<<8|s),f=c<<8|u;o[l]=f,i+=1}if(i!=t)throw new Error(i+" != "+t);return o}(),r="?".charCodeAt(0);return function(e){for(var t=new Array,i=0;i<e.length;i+=1){var o=e.charCodeAt(i);if(o<128)t.push(o);else{var a=n[e.charAt(i)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(r)}}return t}};var n={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},r={L:1,M:0,Q:3,H:2},i={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},o=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,o=7973,s=21522,c={},u=function(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t};return c.getBCHTypeInfo=function(e){for(var t=e<<10;u(t)-u(r)>=0;)t^=r<<u(t)-u(r);return(e<<10|t)^s},c.getBCHTypeNumber=function(e){for(var t=e<<12;u(t)-u(o)>=0;)t^=o<<u(t)-u(o);return e<<12|t},c.getPatternPosition=function(e){return t[e-1]},c.getMaskFunction=function(e){switch(e){case i.PATTERN000:return function(e,t){return(e+t)%2==0};case i.PATTERN001:return function(e,t){return e%2==0};case i.PATTERN010:return function(e,t){return t%3==0};case i.PATTERN011:return function(e,t){return(e+t)%3==0};case i.PATTERN100:return function(e,t){return(Math.floor(e/2)+Math.floor(t/3))%2==0};case i.PATTERN101:return function(e,t){return e*t%2+e*t%3==0};case i.PATTERN110:return function(e,t){return(e*t%2+e*t%3)%2==0};case i.PATTERN111:return function(e,t){return(e*t%3+(e+t)%2)%2==0};default:throw new Error("bad maskPattern:"+e)}},c.getErrorCorrectPolynomial=function(t){for(var n=e([1],0),r=0;r<t;r+=1)n=n.multiply(e([1,a.gexp(r)],0));return n},c.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case n.MODE_NUMBER:return 10;case n.MODE_ALPHA_NUM:return 9;case n.MODE_8BIT_BYTE:return 8;case n.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case n.MODE_NUMBER:return 12;case n.MODE_ALPHA_NUM:return 11;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else{if(!(t<41))throw new Error("type:"+t);switch(e){case n.MODE_NUMBER:return 14;case n.MODE_ALPHA_NUM:return 13;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}}},c.getLostPoint=function(e){for(var t=e.getModuleCount(),n=0,r=0;r<t;r+=1)for(var i=0;i<t;i+=1){for(var o=0,a=e.isDark(r,i),s=-1;s<=1;s+=1)if(!(r+s<0||t<=r+s))for(var c=-1;c<=1;c+=1)i+c<0||t<=i+c||0==s&&0==c||a==e.isDark(r+s,i+c)&&(o+=1);o>5&&(n+=3+o-5)}for(var r=0;r<t-1;r+=1)for(var i=0;i<t-1;i+=1){var u=0;e.isDark(r,i)&&(u+=1),e.isDark(r+1,i)&&(u+=1),e.isDark(r,i+1)&&(u+=1),e.isDark(r+1,i+1)&&(u+=1),0!=u&&4!=u||(n+=3)}for(var r=0;r<t;r+=1)for(var i=0;i<t-6;i+=1)e.isDark(r,i)&&!e.isDark(r,i+1)&&e.isDark(r,i+2)&&e.isDark(r,i+3)&&e.isDark(r,i+4)&&!e.isDark(r,i+5)&&e.isDark(r,i+6)&&(n+=40);for(var i=0;i<t;i+=1)for(var r=0;r<t-6;r+=1)e.isDark(r,i)&&!e.isDark(r+1,i)&&e.isDark(r+2,i)&&e.isDark(r+3,i)&&e.isDark(r+4,i)&&!e.isDark(r+5,i)&&e.isDark(r+6,i)&&(n+=40);for(var l=0,i=0;i<t;i+=1)for(var r=0;r<t;r+=1)e.isDark(r,i)&&(l+=1);var f=Math.abs(100*l/t/t-50)/5;return n+=10*f},c}(),a=function(){for(var e=new Array(256),t=new Array(256),n=0;n<8;n+=1)e[n]=1<<n;for(var n=8;n<256;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(var n=0;n<255;n+=1)t[e[n]]=n;var r={};return r.glog=function(e){if(e<1)throw new Error("glog("+e+")");return t[e]},r.gexp=function(t){for(;t<0;)t+=255;for(;t>=256;)t-=255;return e[t]},r}(),s=function(){var e=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(e,t){var n={};return n.totalCount=e,n.dataCount=t,n},n={},i=function(t,n){switch(n){case r.L:return e[4*(t-1)+0];case r.M:return e[4*(t-1)+1];case r.Q:return e[4*(t-1)+2];case r.H:return e[4*(t-1)+3];default:return}};return n.getRSBlocks=function(e,n){var r=i(e,n);if("undefined"==typeof r)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+n);for(var o=r.length/3,a=new Array,s=0;s<o;s+=1)for(var c=r[3*s+0],u=r[3*s+1],l=r[3*s+2],f=0;f<c;f+=1)a.push(t(u,l));return a},n}(),c=function(){var e=new Array,t=0,n={};return n.getBuffer=function(){return e},n.getAt=function(t){var n=Math.floor(t/8);return 1==(e[n]>>>7-t%8&1)},n.put=function(e,t){for(var r=0;r<t;r+=1)n.putBit(1==(e>>>t-r-1&1))},n.getLengthInBits=function(){return t},n.putBit=function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1},n},u=function(e){var r=n.MODE_8BIT_BYTE,i=t.stringToBytes(e),o={};return o.getMode=function(){return r},o.getLength=function(e){return i.length},o.write=function(e){for(var t=0;t<i.length;t+=1)e.put(i[t],8)},o},l=function(){var e=new Array,t={};return t.writeByte=function(t){e.push(255&t)},t.writeShort=function(e){t.writeByte(e),t.writeByte(e>>>8)},t.writeBytes=function(e,n,r){n=n||0,r=r||e.length;for(var i=0;i<r;i+=1)t.writeByte(e[i+n])},t.writeString=function(e){for(var n=0;n<e.length;n+=1)t.writeByte(e.charCodeAt(n))},t.toByteArray=function(){return e},t.toString=function(){var t="";t+="[";for(var n=0;n<e.length;n+=1)n>0&&(t+=","),t+=e[n];return t+="]"},t},f=function(){var e=0,t=0,n=0,r="",i={},o=function(e){r+=String.fromCharCode(a(63&e))},a=function(e){if(e<0);else{if(e<26)return 65+e;if(e<52)return 97+(e-26);if(e<62)return 48+(e-52);if(62==e)return 43;if(63==e)return 47}throw new Error("n:"+e)};return i.writeByte=function(r){for(e=e<<8|255&r,t+=8,n+=1;t>=6;)o(e>>>t-6),t-=6},i.flush=function(){if(t>0&&(o(e<<6-t),e=0,t=0),n%3!=0)for(var i=3-n%3,a=0;a<i;a+=1)r+="="},i.toString=function(){return r},i},d=function(e){var t=e,n=0,r=0,i=0,o={};o.read=function(){for(;i<8;){if(n>=t.length){if(0==i)return-1;throw new Error("unexpected end of file./"+i)}var e=t.charAt(n);if(n+=1,"="==e)return i=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),i+=6)}var o=r>>>i-8&255;return i-=8,o};var a=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw new Error("c:"+e)};return o},p=function(e,t){var n=e,r=t,i=new Array(e*t),o={};o.setPixel=function(e,t,r){i[t*n+e]=r},o.write=function(e){e.writeString("GIF87a"),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);var t=2,i=s(t);e.writeByte(t);for(var o=0;i.length-o>255;)e.writeByte(255),e.writeBytes(i,o,255),o+=255;e.writeByte(i.length-o),e.writeBytes(i,o,i.length-o),e.writeByte(0),e.writeString(";")};var a=function(e){var t=e,n=0,r=0,i={};return i.write=function(e,i){if(e>>>i!=0)throw new Error("length over");for(;n+i>=8;)t.writeByte(255&(e<<n|r)),i-=8-n,e>>>=8-n,r=0,n=0;r|=e<<n,n+=i},i.flush=function(){n>0&&t.writeByte(r)},i},s=function(e){for(var t=1<<e,n=(1<<e)+1,r=e+1,o=c(),s=0;s<t;s+=1)o.add(String.fromCharCode(s));o.add(String.fromCharCode(t)),o.add(String.fromCharCode(n));var u=l(),f=a(u);f.write(t,r);var d=0,p=String.fromCharCode(i[d]);for(d+=1;d<i.length;){var h=String.fromCharCode(i[d]);d+=1,o.contains(p+h)?p+=h:(f.write(o.indexOf(p),r),o.size()<4095&&(o.size()==1<<r&&(r+=1),o.add(p+h)),p=h)}return f.write(o.indexOf(p),r),f.write(n,r),f.flush(),u.toByteArray()},c=function(){var e={},t=0,n={};return n.add=function(r){if(n.contains(r))throw new Error("dup key:"+r);e[r]=t,t+=1},n.size=function(){return t},n.indexOf=function(t){return e[t]},n.contains=function(t){return"undefined"!=typeof e[t]},n};return o},h=function(e,t,n,r){for(var i=p(e,t),o=0;o<t;o+=1)for(var a=0;a<e;a+=1)i.setPixel(a,o,n(a,o));var s=l();i.write(s);for(var c=f(),u=s.toByteArray(),d=0;d<u.length;d+=1)c.writeByte(u[d]);c.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=c,h+='"',h+=' width="',h+=e,h+='"',h+=' height="',h+=t,h+='"',r&&(h+=' alt="',h+=r,h+='"'),h+="/>"};return t}();return function(n){i=[],r=n,o="function"==typeof r?r.apply(t,i):r,!(void 0!==o&&(e.exports=o))}(function(){return n}),!function(e){e.stringToBytes=function(e){function t(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);r<128?t.push(r):r<2048?t.push(192|r>>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}return t(e)}}(n),n}(),l=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;n=Math.max(1,n);for(var r=n;r<=40;r+=1)try{var i=function(){var n=u(r,t);n.addData(e),n.make();var i=n.getModuleCount(),o=function(e,t){return e>=0&&e<i&&t>=0&&t<i&&n.isDark(e,t)};return{v:{text:e,level:t,version:r,moduleCount:i,isDark:o}}}();if("object"===("undefined"==typeof i?"undefined":s(i)))return i.v}catch(e){if(!(r<40&&c.test(e.message)))throw e}return null},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"L",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=l(e,t,n);if(i){var o=i.isDark;i.moduleCount+=2*r,i.isDark=function(e,t){return o(e-r,t-r)}}return i};n.exports=f},function(e,t,n){"use strict";var r=n(5),i=n(6),o=function(e,t){e.fillStyle=t.back,e.fillRect(0,0,t.size,t.size)},a=function(e,t,n,r,i,o){e.isDark(i,o)&&t.rect(o*r,i*r,r,r)},s=function(e,t,n){if(e){var i=n.rounded>0&&n.rounded<=100?r:a,o=e.moduleCount,s=n.size/o,c=0;n.crisp&&(s=Math.floor(s),c=Math.floor((n.size-s*o)/2)),t.translate(c,c),t.beginPath();for(var u=0;u<o;u+=1)for(var l=0;l<o;l+=1)i(e,t,n,s,u,l);t.fillStyle=n.fill,t.fill(),t.translate(-c,-c)}},c=function(e,t,n){o(t,n),s(e,t,n),i(t,n)};e.exports=c},function(e,t){"use strict";var n=function(e){return{c:e,m:function(){var e;return(e=this.c).moveTo.apply(e,arguments),this},l:function(){var e;return(e=this.c).lineTo.apply(e,arguments),this},a:function(){var e;return(e=this.c).arcTo.apply(e,arguments),this}}},r=function(e,t,n,r,i,o,a,s,c,u){a?e.m(t+o,n):e.m(t,n),s?e.l(r-o,n).a(r,n,r,i,o):e.l(r,n),c?e.l(r,i-o).a(r,i,t,i,o):e.l(r,i),u?e.l(t+o,i).a(t,i,t,n,o):e.l(t,i),a?e.l(t,n+o).a(t,n,r,n,o):e.l(t,n)},i=function(e,t,n,r,i,o,a,s,c,u){a&&e.m(t+o,n).l(t,n).l(t,n+o).a(t,n,t+o,n,o),s&&e.m(r-o,n).l(r,n).l(r,n+o).a(r,n,r-o,n,o),c&&e.m(r-o,i).l(r,i).l(r,i-o).a(r,i,r-o,i,o),u&&e.m(t+o,i).l(t,i).l(t,i-o).a(t,i,t+o,i,o)},o=function(e,t,o,a,s,c){var u=c*a,l=s*a,f=u+a,d=l+a,p=.005*o.rounded*a,h=e.isDark,g=s-1,m=s+1,v=c-1,b=c+1,w=h(s,c),y=h(g,v),x=h(g,c),k=h(g,b),_=h(s,b),C=h(m,b),S=h(m,c),A=h(m,v),T=h(s,v);t=n(t),w?r(t,u,l,f,d,p,!x&&!T,!x&&!_,!S&&!_,!S&&!T):i(t,u,l,f,d,p,x&&T&&y,x&&_&&k,S&&_&&C,S&&T&&A)};e.exports=o},function(e,t){"use strict";var n=function(e,t){var n=t.size,r="bold "+.01*t.mSize*n+"px "+t.fontname;e.strokeStyle=t.back,e.lineWidth=.01*t.mSize*n*.1,e.fillStyle=t.fontcolor,e.font=r;var i=e.measureText(t.label).width,o=.01*t.mSize,a=i/n,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n+.75*t.mSize*.01*n;e.strokeText(t.label,u,l),e.fillText(t.label,u,l)},r=function(e,t){var n=t.size,r=t.image.naturalWidth||1,i=t.image.naturalHeight||1,o=.01*t.mSize,a=o*r/i,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n,f=a*n,d=o*n;e.draw_image(t.image,u,l,f,d)},i=function(e,t){var i=t.mode;"label"===i?n(e,t):"image"===i&&r(e,t)};e.exports=i}])})},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.isStr,o=t.dom,a=n(8),s=n(12),c=n(19),u=n(35),l=n(14),f=n(16),d=e.window,p=Object.assign({enabled:!1,lang:"en",useBrowserLang:!0},l.l10n),h={isoCode:"en",lang:"english",dateFormat:"YYYY-MM-DD HH:mm",details:"details",download:"download",empty:"empty",files:"files",filter:"filter",folders:"folders",grid:"grid",icons:"icons",language:"Language",lastModified:"Last modified",name:"Name",noMatch:"no match",parentDirectory:"Parent Directory",search:"search",size:"Size",tree:"Tree",view:"View"},g='<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',m="<option/>",v="ext/l10n",b={en:Object.assign({},h)},w=b.en,y=function(e){e&&(w=e);var t="selected";o("#langs option").rmAttr(t).rmProp(t),o("#langs ."+w.isoCode).attr(t,"").prop(t,!0),r(w,function(e,t){o(".l10n-"+t).text(e),o(".l10n_ph-"+t).attr("placeholder",e)}),c.setDefaultDateFormat(w.dateFormat),o("#items .item").each(function(e){o(e).find(".date").text(c.formatDate(e._item.time))})},x=function(e){return b[e]?Promise.resolve(b[e]):a.request({action:"get",l10n:[e]}).then(function(t){return b[e]=Object.assign({},h,t.l10n&&t.l10n[e],{isoCode:e}),b[e]})},k=function(e,t,n){var r=f.get(v);if(e[r])t=r;else if(n){var i=d.navigator.language||d.navigator.browserLanguage;i&&(e[i]?t=i:i.length>2&&e[i.substr(0,2)]&&(t=i.substr(0,2)))}e[t]||(t="en"),x(t).then(y)},_=function(e){var t=o(g),n=t.find("select").on("change",function(t){var n=t.target.value;f.put(v,n),k(e,n,!1)});r(e,function(e,t){o(m).attr("value",t).addCls(t).text(t+" - "+(i(e)?e:e.lang)).appTo(n)}),t.appTo("#sidebar")},C=function(){p.enabled&&_(u),s.sub("view.changed",function(){k(u,p.lang,p.useBrowserLang)})};C()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(7),i=r.langs;e.exports=Object.assign({},i)},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=t.awaitLoad,o=n(12),a=n(14),s=e.window,c=Object.assign({enabled:!1,baseURL:"not-set",idSite:0},a["piwik-analytics"]),u=function(){if(c.enabled){var e=("https:"===s.location.protocol?"https://":"http://")+c.baseURL+"/",t=[],n=null;r("<script></script>").attr("src",e+"piwik.js").appTo("body"),i().then(function(){if(n=s.Piwik&&s.Piwik.getTracker(e+"piwik.php",c.idSite))for(n.enableLinkTracking();t.length;)n.trackPageView(t.shift())}),o.sub("location.changed",function(e){var r=e.getCrumb().map(function(e){return e.label}).join(" > ");n?n.trackPageView(r):t.push(r)})}};u()}).call(t,function(){return this}())},function(e,t,n){"use strict";n(38),n(39),n(40),n(41),n(43)},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.isFn,a=r.dom,s=r.includes,c=r.compact,u=n(12),l=n(13),f=n(14),d=n(16),p=t.window,h=Object.assign({enabled:!0},f.preview),g='<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="'+l.image("spinner")+'"/></div>\n <div id="pv-prev-area" class="hof"><img src="'+l.image("preview-prev")+'"/></div>\n <div id="pv-next-area" class="hof"><img src="'+l.image("preview-next")+'"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="'+l.image("preview-close")+'"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="'+l.image("preview-raw")+'"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="'+l.image("preview-fullscreen")+'"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="'+l.image("preview-next")+'"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="'+l.image("preview-prev")+'"/></li>\n </ul>\n </div>\n </div>',m="ext/preview",v=d.get(m)||!1,b=null,w=!1,y=null,x=null,k=function(){var e=a("#pv-container"),t=e[0],n=e.children()[0];if(t&&n){var r=t.offsetWidth,i=t.offsetHeight,o=n.offsetWidth,s=n.offsetHeight;a(n).css({left:.5*(r-o)+"px",top:.5*(i-s)+"px"})}},_=function(){var e=p.document.documentElement,t=e.clientWidth,n=e.clientHeight,r=v?0:20,i=v?0:48;a("#pv-container").css({width:t-2*r+"px",height:n-2*r-i+"px",left:r+"px",top:r+"px"}),a("#pv-spinner").css({left:.5*t+"px",top:.5*n+"px"}),v?(a("#pv-overlay").addCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-no-fullscreen"))):(a("#pv-overlay").rmCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-fullscreen"))),k(),o(x&&x.adjust)&&x.adjust()},C=function(e,t){a("#pv-bar-idx").text(e+"/"+t).show()},S=function(e){a("#pv-bar-raw").show().find("a").attr("href",e)},A=function(e){a("#pv-buttons .bar-left").rm(),i(e,function(e){a("<li></li>").addCls("bar-left").addCls("bar-label").text(e).appTo("#pv-buttons")})},T=function(){var e=a("#pv-overlay .hof");p.clearTimeout(b),e.show(),v&&(b=p.setTimeout(function(){return e.hide()},2e3))},E=function(){return x&&x.moveIdx(1)},M=function(){return x&&x.moveIdx(-1)},D=function(){v=!v,d.put(m,v),T(),_()},P=function(e){e.stopPropagation(),e.preventDefault()},z=function(e){var t=e.keyCode;27===t?(P(e),$()):8===t||37===t?(P(e),M()):13===t||32===t||39===t?(P(e),E()):70===t&&(P(e),D())},L=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").show(),a(p).on("keydown",z),_()},$=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").hide(),a(p).off("keydown",z)},H=function e(t,n,r){p.clearTimeout(y);var i=a("#pv-spinner");if(!t)return w=!1,void i.hide();if(!w&&r)return void(y=p.setTimeout(function(){return e(!0,n)},r));var o=i.find(".back");n?o.attr("src",n).show():o.hide(),w=!0,i.show()},O=function e(t,n,r,i){var o=Object.assign(Object.create(e.prototype),{items:t,load:r,adjust:i});return o.setIdx(n),o};O.prototype={setIdx:function(e){var t=this;this.idx=(e+this.items.length)%this.items.length,this.item=this.items[this.idx],C(this.idx+1,this.items.length),S(this.item.absHref),A([this.item.label]);var n=this.item;Promise.resolve().then(function(){i(a("#pv-container *"),function(e){"function"==typeof e.unload&&e.unload()}),a("#pv-container").hide().clr(),H(!0,n.thumbSquare||n.icon,200)}).then(function(){return t.load(n)}).then(function(e){n===t.item&&(a("#pv-container").clr().app(e).show(),H(!1),_())})},moveIdx:function(e){this.setIdx(this.idx+e)}};var B=function(e,t,n){var r=function(r){r.$view&&s(e,r.type)&&r.$view.find("a").on("click",function(i){i.preventDefault();var o=c(a("#items .item").map(function(t){var n=t._item;return s(e,n.type)?n:null}));x=O(o,o.indexOf(r),t,n),L()})};u.sub("view.changed",function(e){return i(e,r)})},R=function(){h.enabled&&(a(g).hide().appTo("body").on("keydown",z).on("mousemove",T).on("mousedown",T).on("click",function(e){"pv-overlay"!==e.target.id&&"pv-container"!==e.target.id||$()}).on("mousedown",P).on("mousemove",P).on("keydown",P).on("keypress",P),a("#pv-spinner").hide(),a("#pv-bar-prev, #pv-prev-area").on("click",M),a("#pv-bar-next, #pv-next-area").on("click",E),a("#pv-bar-close").on("click",$),a("#pv-bar-fullscreen").on("click",D),a(p).on("resize",_).on("load",_))};e.exports={setLabels:A,register:B,get item(){return x&&x.item}},R()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(19),a=n(14),s=n(38),c=Object.assign({enabled:!1,autoplay:!0,types:[]},a["preview-aud"]),u='<audio id="pv-content-aud"/>',l=function(){var e=i("#pv-content-aud")[0];e&&s.setLabels([s.item.label,o.formatDate(1e3*e.duration,"m:ss")])},f=function(e){e.unload=function(){e.src="",e.load()}},d=function(e){return new Promise(function(t){var n=i(u).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");c.autoplay&&n.attr("autoplay","autoplay"),f(n[0]),n.attr("src",e.absHref)})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(8),a=n(14),s=n(38),c=Object.assign({enabled:!1,size:null,types:[]},a["preview-img"]),u='<img id="pv-content-img"/>',l=function(){var e=i("#pv-content-img")[0];if(e){var t=e.offsetWidth,n=[s.item.label];if(!c.size){var r=e.naturalWidth,o=e.naturalHeight;n.push(String(r)+"x"+String(o)),n.push(String((100*t/r).toFixed(0))+"%")}s.setLabels(n)}},f=function(e){return o.request({action:"get",thumbs:[{type:"img",href:e,width:c.size,height:0}]}).then(function(e){return e&&e.thumbs&&e.thumbs[0]?e.thumbs[0]:null})},d=function(e){return Promise.resolve(e.absHref).then(function(e){return c.size?f(e):e}).then(function(e){return new Promise(function(t){var n=i(u).on("load",function(){return t(n)}).attr("src",e)})})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){(function(e){"use strict";var t=n(42),r=n(28),i=n(2),o=i.keys,a=i.dom,s=n(14),c=n(38),u=e.window,l=u.XMLHttpRequest,f=Object.assign({enabled:!1,styles:{}},s["preview-txt"]),d='<pre id="pv-content-txt"></pre>',p='<div id="pv-content-txt"></div>',h=function(){var e=a("#pv-content-txt")[0];if(e){var t=a("#pv-container")[0];e.style.height=t.offsetHeight+"px",c.setLabels([c.item.label,c.item.size+" bytes"])}},g=function(e){return new Promise(function(t,n){var r=new l,i=function(){if(r.readyState===l.DONE)try{t(r.responseText||"")}catch(e){n(String(e))}};r.open("GET",e,!0),r.onreadystatechange=i,r.send()})},m=function(e){return g(e.absHref).catch(function(e){return"[request failed] "+e}).then(function(n){var i=f.styles[e.type];if(1===i)return a(d).text(n);if(2===i)return a(p).html(r(n));if(3===i){var o=a("<code></code>").text(n);return u.setTimeout(function(){t.el(o[0])},n.length<2e4?0:500),a(d).app(o)}return a(p).text(n)})},v=function(){f.enabled&&c.register(o(f.styles),m,h)};v()}).call(t,function(){return this}())},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){var e=".lolight",t="ll-",n="_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}".replace(/_/g,"."+t).replace(/#/g,"{color:#"),r=/^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,i="com",o="key",a="nam",s="num",c="pct",u="rex",l="spc",f="str",d="unk",p=[[s,/#([0-9a-f]{6}|[0-9a-f]{3})\b/],[i,/(\/\/|#).*?(?=\n|$)/],[i,/\/\*[\s\S]*?\*\//],[i,/<!--[\s\S]*?-->/],[u,/\/(\\\/|[^\n])*?\//],[f,/(['"`])(\\\1|[\s\S])*?\1/],[s,/[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?/],[c,/[\\.,:;+\-*\/=<>()[\]{}|?!&(a)~]/],[l,/\s+/],[a,/[\w$]+/],[d,/./]],h=function(e){if("string"!=typeof e)throw new Error("tok: no string");for(var t=[],n=p.length,i=!1;e;)for(var c=0;c<n;c+=1){var f=p[c][1].exec(e);if(f&&0===f.index){var d=p[c][0];if(d!==u||!i){var h=f[0];d===a&&r.test(h)&&(d=o),d===l?h.indexOf("\n")>=0&&(i=!1):i=d===s||d===a,e=e.slice(h.length),t.push([d,h]);break}}}return t},g=function(e,t){if("undefined"!=typeof document)t(document);else if(e)throw new Error("no doc")},m=function(e){g(!0,function(n){var r=h(e.textContent);e.innerHTML="",r.forEach(function(r){var i=n.createElement("span");i.className=t+r[0],i.textContent=r[1],e.appendChild(i)})})},v=function(t){g(!0,function(n){[].forEach.call(n.querySelectorAll(t||e),function(e){m(e)})})};return g(!1,function(e){var t=e.querySelector("head"),r=e.createElement("style");r.textContent=n,t.insertBefore(r,t.firstChild),/^(i|c|loade)/.test(e.readyState)?v():e.addEventListener("DOMContentLoaded",function(){v()})}),v.tok=h,v.el=m,v})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(14),a=n(38),s=Object.assign({enabled:!1,autoplay:!0,types:[]},o["preview-vid"]),c='<video id="pv-content-vid"/>',u=function(){var e=i("#pv-content-vid")[0];if(e){var t=e.offsetWidth,n=e.videoWidth,r=e.videoHeight;a.setLabels([a.item.label,String(n)+"x"+String(r),String((100*t/n).toFixed(0))+"%"])}},l=function(e){e.unload=function(){e.src="",e.load()}},f=function(e){return new Promise(function(t){var n=i(c).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");s.autoplay&&n.attr("autoplay","autoplay"),l(n[0]),n.attr("src",e.absHref)})},d=function(){s.enabled&&a.register(s.types,f,u)};d()},function(e,t,n){"use strict";var r=n(2),i=r.map,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(8),u=n(12),l=n(20),f=n(13),d=n(14),p=n(22),h=n(18),g=Object.assign({enabled:!1,advanced:!1,debounceTime:300,ignorecase:!0},d.search),m='<div id="search" class="tool">\n <img src="'+f.image("search")+'" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',v=!1,b="",w=void 0,y=void 0,x=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==b){if(b=e,!e)return void h.setLocation();w.addCls("pending"),c.request({action:"get",search:{href:l.getAbsHref(),pattern:e,ignorecase:g.ignorecase}}).then(function(e){w.rmCls("pending"),h.setHint("noMatch"),h.setItems(i(e.search,function(e){return p.get(e)}))})}},k=function(){v?(w.addCls("active"),y[0].focus(),x(a(y.val(),g.advanced))):(x(),w.rmCls("active"))},_=function(){v=!v,k()},C=function(){v=!1,y.val(""),k()},S=function(){g.enabled&&(w=s(m).appTo("#toolbar"),y=w.find("input"),w.find("img").on("click",_),y.on("keyup",o(k,g.debounceTime)),u.sub("location.changed",C))};S()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.dom,o=n(12),a=n(13),s=n(14),c=e.window.document,u=Object.assign({enabled:!1,clickndrag:!1,checkboxes:!1},s.select),l='<span class="selector">\n <img src="'+a.image("selected")+'" alt="selected"/>\n </span>',f=i(c),d=i("html"),p=i('<div id="selection-rect"></div>'),h=Math.max,g=Math.min,m=Math.abs,v=0,b=0,w=function(){var e=i("#items .item.selected").map(function(e){return e._item});o.pub("selection",e)},y=function(e){var t=i(e);if(!t.length||t.isHidden())return null;var n=t[0].getBoundingClientRect();return{l:n.left,t:n.top,r:n.right,b:n.bottom}},x=function(e,t){return!!e&&!!t&&e.l===t.l&&e.t===t.t&&e.r===t.r&&e.b===t.b},k=function(e){var t=e[0];x(y(t),t&&t._rect)||e.each(function(e){e._rect=y(e)})},_=function(e,t){if(!e||!t)return!1;var n=h(e.l,t.l),r=g(e.r,t.r),i=h(e.t,t.t),o=g(e.b,t.b);return n<=r&&i<=o},C=function(e){var t=i("#content")[0],n=y(t),r=e.pageX-n.l+t.scrollLeft,o=e.pageY-n.t+t.scrollTop;return{x:r,y:o}},S=function(e){var t=C(e),n=t.x,r=t.y,o=g(v,n),a=g(b,r),s=m(v-n),c=m(b-r),u=e.ctrlKey||e.metaKey;if(!(!u&&s<4&&c<4)){u||i("#items .item").rmCls("selected"),d.addCls("drag-select"),p.show().css({left:o+"px",top:a+"px",width:s+"px",height:c+"px"});var l=y(p),f=i("#items .item:not(.folder-parent)");k(f),f.rmCls("selecting").each(function(e){_(l,e._rect)&&i(e).addCls("selecting")})}},A=function e(t){f.off("mousemove",S).off("mouseup",e),S(t),i("#items .item.selecting.selected").rmCls("selecting").rmCls("selected"),i("#items .item.selecting").rmCls("selecting").addCls("selected"),w(),d.rmCls("drag-select"),p.hide(),t.stopPropagation(),t.preventDefault()},T=function(e){if(!(0!==e.button||e.offsetX>=i("#content")[0].offsetWidth-16)){var t=C(e),n=t.x,r=t.y;v=n,b=r,f.on("mousemove",S).on("mouseup",A),S(e),e.preventDefault()}},E=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},M=function(e){E(e.target).$view.tglCls("selected"),w(),e.stopPropagation(),e.preventDefault()},D=function(e){e.$view&&!e.isCurrentParentFolder()&&i(l).on("click",M).appTo(e.$view.find("a"))},P=function(e,t){u.checkboxes&&r(e,D),r(t,function(e){e.$view&&e.$view.rmCls("selected")}),w()},z=function(){u.enabled&&(u.clickndrag||u.checkboxes)&&(o.sub("view.changed",P),u.clickndrag&&(p.hide().appTo("#content"),i("#content").on("mousedown",T).on("drag",function(e){return e.preventDefault()}).on("dragstart",function(e){return e.preventDefault()})))};z()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.toArray,a=r.dom,s=r.cmp,c=r.naturalCmp,u=n(12),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,column:0,reverse:!1,ignorecase:!0,natural:!1,folders:0},f.sort),h="ext/sort",g='<img src="'+l.image("sort")+'" class="sort" alt="sort order"/>',m=function(e){
+return e.isFolder()?p.folders:1},v={0:"label",1:"time",2:"size"},b={0:"label",1:"date",2:"size"},w=function(e,t,n,r){return function(i,o){var a=i._item,u=o._item,l=m(a)-m(u);if(0!==l)return l;var f=a[e],d=u[e];return(isNaN(f)||isNaN(d))&&(f=String(f),d=String(d),n&&(f=f.toLowerCase(),d=d.toLowerCase())),l=r?c(f,d):s(f,d),t?-l:l}},y=function(e,t){var n=a("#items li.header a"),r=a("#items li.header a."+b[e]),i=w(v[e],t,p.ignorecase,p.natural);d.put(h,{column:e,reverse:t}),n.rmCls("ascending").rmCls("descending"),r.addCls(t?"descending":"ascending"),a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items")},x=function(){var e=d.get(h),t=e&&e.column||p.column,n=e&&e.reverse||p.reverse;y(t,n)},k=function(){var e=a("#items li.header");i(b,function(t,n){var r="0"===n?"app":"pre";e.find("a."+t)[r](g).on("click",function(e){y(n,a(e.currentTarget).hasCls("ascending")),e.preventDefault()})})},_=function(){p.enabled&&(k(),u.sub("view.changed",x))};_()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1,img:["img-bmp","img-gif","img-ico","img-jpg","img-png"],mov:["vid-avi","vid-flv","vid-mkv","vid-mov","vid-mp4","vid-mpg","vid-webm"],doc:["x-pdf","x-ps"],delay:1,size:100,exif:!1,chunksize:20},u.thumbnails),f=4/3,d=function(e,t){var n=null;if(a(l.img,t.type))n="img";else if(a(l.mov,t.type))n="mov";else{if(!a(l.doc,t.type))return;n="doc"}t.thumbSquare?t.$view.find(".icon.square img").addCls("thumb").attr("src",t.thumbSquare):e.push({type:n,href:t.absHref,ratio:1,callback:function(e){e&&t.$view&&(t.thumbSquare=e,t.$view.find(".icon.square img").addCls("thumb").attr("src",e))}}),t.thumbRational?t.$view.find(".icon.landscape img").addCls("thumb").attr("src",t.thumbRational):e.push({type:n,href:t.absHref,ratio:f,callback:function(e){e&&t.$view&&(t.thumbRational=e,t.$view.find(".icon.landscape img").addCls("thumb").attr("src",e))}})},p=function(e){var t=o(e,function(e){return{type:e.type,href:e.href,width:Math.round(l.size*e.ratio),height:l.size}});return s.request({action:"get",thumbs:t}).then(function(t){i(e,function(e,n){e.callback(t&&t.thumbs?t.thumbs[n]:null)})})},h=function(e){for(var t=e.length,n=l.chunksize,r=Promise.resolve(),i=function(t){r=r.then(function(){return p(e.slice(t,t+n))})},o=0;o<t;o+=n)i(o)},g=function(e){var t=[];i(e,function(e){return d(t,e)}),h(t)},m=function(e){setTimeout(function(){return g(e)},l.delay)},v=function(){l.enabled&&c.sub("view.changed",m)};v()},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(14),i=e.window.document,o=Object.assign({enabled:!1},r.title),a=function(e){var t=e.getCrumb().map(function(e){return e.label}),n=t.join(" > ");t.length>1&&(n=t[t.length-1]+" - "+n),i.title=n},s=function(){o.enabled&&t.sub("location.changed",a)};s()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=r.cmp,s=r.naturalCmp,c=n(12),u=n(20),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,show:!0,maxSubfolders:50,naturalSort:!1,ignorecase:!0},f.tree),h='<div class="item folder">\n <span class="indicator">\n <img src="'+l.image("tree-indicator")+'"/>\n </span>\n <a>\n <span class="icon"><img src="'+l.icon("folder")+'"/></span>\n <span class="label"></span>\n </a>\n </span>',g='<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="'+l.image("tree-toggle")+'" alt="view-tree"/>\n </div>\n </div>',m="ext/tree",v=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},b=function(e){var t=v(e.target);"unknown"===t._treeState?t.fetchContent().then(function(){t._treeState="open",y(t)}):"open"===t._treeState?(t._treeState="closed",t._$tree.rmCls("open").addCls("closed")):"closed"===t._treeState&&(t._treeState="open",t._$tree.rmCls("closed").addCls("open"))},w=function(e,t){var n=e.label,r=t.label;return p.ignorecase&&(n=n.toLowerCase(),r=r.toLowerCase()),p.naturalSort?s(n,r):a(n,r)},y=function e(t){var n=t.getSubfolders(),r=n.length,a=p.maxSubfolders,s=o(h);if(s.find(".indicator").on("click",b),s.find(".label").text(t.label),u.setLink(s.find("a"),t),t.isCurrentFolder()&&s.addCls("active"),t.isManaged||s.find(".icon img").attr("src",l.icon("folder-page")),t._treeState=t._treeState||"none",t.isManaged&&!t.isContentFetched?t._treeState="unknown":r||(t._treeState="none"),s.addCls(t._treeState),r){var c=o('<div class="content"></div>').appTo(s);n.sort(w),i(n.slice(0,a),function(t){return c.app(e(t))}),r>a&&c.app('<div class="summary">… '+(r-a)+" more subfolders</div>")}return t._$tree&&t._$tree.rpl(s),t._$tree=s,s[0]._item=t,s},x=function e(t){return t._treeState="open",t.fetchContent().then(function(){return t.parent?e(t.parent):t})},k=function(){d.get(m)?(o("#view-tree").addCls("active"),o("#tree").show()):(o("#view-tree").rmCls("active"),o("#tree").hide())},_=function(e){x(e).then(function(e){o("#tree").clr().app(y(e)),k()})},C=function(){p.enabled&&(o('<div id="tree"></div>').hide().appTo("#mainrow"),o(g).appTo("#sidebar").find("#view-tree").on("click",function(e){d.put(m,!d.get(m)),k(),c.pub("resize"),e.preventDefault()}),"boolean"!=typeof d.get(m)&&d.put(m,p.show),k(),c.sub("location.changed",_))};C()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=n(7),o=n(8),a=n(13),s='<ul id="tests"></ul>',c='<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',u='<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in \'_h5ai/private/conf/options.json\'.\n </div>\n </div>',l='<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="'+a.image("paypal")+'" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',f=i.setup,d=function(e,t,n,i){var o=r(c).appTo("#tests");o.find(".label").text(e),o.find(".result").addCls(n?"passed":"failed").text(i?i:n?"yes":"no"),o.find(".info").html(t)},p=function(){f.AS_ADMIN&&(r(s).appTo("#content"),d("h5ai version","Only green if this is an official h5ai release",/^\d+\.\d+\.\d+$/.test(f.VERSION),f.VERSION),d("Index file found","Add <code>"+f.INDEX_HREF+"</code> to your index file list",f.INDEX_HREF),d("Options parsable","File <code>options.json</code> is readable and syntax is correct",null!==i.options),d("Types parsable","File <code>types.json</code> is readable and syntax is correct",null!==i.types),d("Server software","Server is one of apache, lighttpd, nginx or cherokee",f.HAS_SERVER,f.SERVER_NAME+" "+f.SERVER_VERSION),d("PHP version","PHP version >= "+f.MIN_PHP_VERSION,!0,f.PHP_VERSION),d("PHP arch","64-bit required to correctly display file/folder sizes > ~2GB","64-bit"===f.PHP_ARCH,f.PHP_ARCH),d("Public Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PUB),d("Private Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PRV),d("Image thumbs","PHP GD extension with JPEG support available",f.HAS_PHP_JPEG),d("Use EXIF thumbs","PHP EXIF extension available",f.HAS_PHP_EXIF),d("Movie thumbs","Command line program <code>avconv</code> or <code>ffmpeg</code> available",f.HAS_CMD_AVCONV||f.HAS_CMD_FFMPEG),d("PDF thumbs","Command line program <code>convert</code> or <code>gm</code> available",f.HAS_CMD_CONVERT||f.HAS_CMD_GM),d("Shell tar","Command line program <code>tar</code> available",f.HAS_CMD_TAR),d("Shell zip","Command line program <code>zip</code> available",f.HAS_CMD_ZIP),d("Shell du","Command line program <code>du</code> available",f.HAS_CMD_DU))},h=function(){e.window.location.reload()},g=function(){o.request({action:"login",pass:r("#pass").val()}).then(h)},m=function(){o.request({action:"logout"}).then(h)},v=function(e){13===e.which&&g()},b=function(){r(l).appTo("#content")},w=function(){r(u).appTo("#content"),f.AS_ADMIN?(r("#pass").rm(),r("#login").rm(),r("#logout").on("click",m)):(r("#pass").on("keydown",v)[0].focus(),r("#login").on("click",g),r("#logout").rm()),i.options.hasCustomPasshash&&r("#hint").rm()},y=function(){b(),w(),p()};y()}).call(t,function(){return this}())}]);
\ No newline at end of file
--
2.23.0
1
0
Signed-off-by: Ren Wen <15991987063(a)163.com>
---
src/scheduler/submit_job.cr | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/scheduler/submit_job.cr b/src/scheduler/submit_job.cr
index 4303b1d..c322d0f 100644
--- a/src/scheduler/submit_job.cr
+++ b/src/scheduler/submit_job.cr
@@ -37,6 +37,7 @@ class Sched
def submit_cluster_job(job, cluster_config)
job_messages = Array(Hash(String, String)).new
lab = job.lab
+ subqueue = job.subqueue
# collect all job ids
job_ids = [] of String
@@ -52,7 +53,7 @@ class Sched
# steps for each host
cluster_config["nodes"].as_h.each do |host, config|
queue = host.to_s
- job_id = add_task(queue, lab)
+ job_id = add_task("#{queue}/#{subqueue}", lab)
# return when job_id is '0'
# 2 Questions:
--
2.23.0
2
2

15 Dec '20
Signed-off-by: Wang Chenglong <18509160991(a)163.com>
---
doc/tutorial.md | 84 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 55 insertions(+), 29 deletions(-)
diff --git a/doc/tutorial.md b/doc/tutorial.md
index e6f8491..88544f4 100644
--- a/doc/tutorial.md
+++ b/doc/tutorial.md
@@ -152,29 +152,34 @@ job yaml ���������������������������������������������[YAML](http://yaml.org/YAM
1. ������������ os ��������� rootfs������ openEuler ���������
- ������ docker ������ rootfs
-
+
1) ������ openEuler ��������������� docker ���������������
-
+
```bash
wget https://repo.openeuler.org/openEuler-20.03-LTS/docker_img/aarch64/openEuler…
- ```
- 2) ������ docker ������
+ ```
+ 2) ������ docker ������
```bash
docker load -i openEuler-docker.aarch64
```
- 3) ������ openEuler ������
+ 3) ������ openEuler ������
```bash
- docker run -id openeuler-20.03-lts
+ docker run -d --name initramfs-docker openeuler-20.03-lts
```
- 4) ������ docker ��� rootfs
+ 4) ������ docker ��� rootfs
```bash
- docker cp -a docker run -d openeuler-20.03-lts:/ openEuler-rootfs
+ docker cp -a initramfs-docker:/ openEuler-rootfs/
```
- - ������ qemu.img(qcow2������)������ rootfs (openEuler������)
+ {compass-ci} ������������������������ '.tar.xz' ��������� docker ������������������ rootfs ������������
+ ```bash
+ ./{compass-ci}/container/docker-rootfs/run openEuler-docker.aarch64.tar.xz /tmp/openeuler-rootfs-20.03
+ ```
- 1) ������ openEule r��������������������� qcow2 ������������
+ - ������ qemu.img(qcow2������)������ rootfs (openEuler������)
+
+ 1) ������ openEuler ��������������������� qcow2 ������������
```bash
wget https://repo.openeuler.org/openEuler-20.03-LTS/virtual_machine_img/aarch64/…
```
@@ -183,45 +188,66 @@ job yaml ���������������������������������������������[YAML](http://yaml.org/YAM
cd {compass-ci}/container/qcow2rootfs
./run openEuler-20.03-LTS.aarch64.qcow2.xz /tmp/openEuler-rootfs
```
+
2. ������rootfs
- 1. ������chroot��������������� rootfs (��������������� root ������)
+ 1. ������ chroot ��������������� rootfs (��������������� root ������)
```bash
chroot openEuler-rootfs
```
2. ���������������������������������������
a. ������ root ������
- b. ������ ssh ������
- c. ������������������
- d. ������������ docker ������ osimage ������������������������
- > 1. ������������������������
- > 2. ��� centos ������������������������rpm���
- > 3. ������ yum ������������
- > 4. ������ docker ������������������
-
- 3. ������ rootfs������������
- ```bash
- cd $rootfs
- find . | coip -o -Hnewc |gzip -9 > $os_name.cgz
- ```
+ b. ��������������� /sbin/init
+ > ���������������systemd������������
+ ```bash
+ ls -l /sbin/init
+ /sbin/init -> ../lib/systemd/systemd
+ ```
+ c. ������������ docker ������ osimage ���������������������
+ > ������ docker ������������������ /.dockerenv
+ d. ������������������
+ > openssh-server (ssh ������������������)
+ > ntpdate (������������)
+ > cifs-utils (cifs���������������������)
+ > nfs-utils (nfs���������������������)
+ > curl (���������url������)
+ ```bash
+ yum -y install openssh-server ntpdate cifs-utils nfs-utils curl
+ ```
+ e. ������������ docker ������ osimage ������������������������
+ > ������ docker ������������������ /.dockerenv
+
+ 3. ������rootfs
+ ```bash
+ cd $rootfs
+ find . | coip -o -Hnewc |gzip -9 > $os_name.cgz
+ ```
+
+ 4. ������������������/������������
+ ������������������ {compass-ci} ��������������������������� ��������� rootfs ������������������������������������������������������/���������������������������
+ ```bash
+ find /lib/modules/* | cpio -o -Hnewc | gzip -9 > /modules-$os_name.cgz
+ find /usr/src/kernels/* | cpio -o -Hnewc | gzip -9 > /headers-$os_name.cgz
+ ```
+
#### FAQ
-1. ������������ ���Unable to mount root fs on unknown-block���
+1. ������������ ���Unable to mount root fs on unknown-block���
- ������������
```bash
[ 0.390437] List of all partitions:
- [ 0.390806] No filesystem could mount root, tried:
+ [ 0.390806] No filesystem could mount root, tried:
[ 0.391489] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
...
[ 0.399404] Memory Limit: none
[ 0.399749] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
```
- ������������
-
+
1������������������������������������������������
2������������������������������������ 644 ���������
-
+
2. ������������������
-
+
- ������������
������������������������������������������������
--
2.23.0
2
4
[error]
Traceback (most recent call last):
5: from /home/lukaiyi/compass-ci/sbin/compare:72:in `<main>'
4: from /home/lukaiyi/compass-ci/lib/compare.rb:66:in `compare_group'
3: from /home/lukaiyi/compass-ci/lib/compare_matrixes.rb:389:in `compare_group_matrices'
2: from /home/lukaiyi/compass-ci/lib/compare_matrixes.rb:389:in `each'
1: from /home/lukaiyi/compass-ci/lib/compare_matrixes.rb:390:in `block in compare_group_matrices'
/home/lukaiyi/compass-ci/lib/compare_matrixes.rb:390:in `+': no implicit conversion of nil into String (TypeError)
[why]
get_matrix_str maybe return nil, if so, the line 390 will raise error like above.
386 def compare_group_matrices(group_matrices, suites_list, options)
387 result_str = ''
388 group_matrices_array = sort_by_matrix_size(group_matrices)
389 group_matrices_array.each do |matrice_kv|
390 result_str += get_matrix_str(matrice_kv[0], matrice_kv[1], suites_list, options)
391 end
392 result_str
393 end
---
lib/compare_matrixes.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/compare_matrixes.rb b/lib/compare_matrixes.rb
index 0e08ec7..e8f52f1 100644
--- a/lib/compare_matrixes.rb
+++ b/lib/compare_matrixes.rb
@@ -402,6 +402,7 @@ def get_matrix_str(matrice_key, matrice_value, suites_list, options)
return compare_matrixes(m_list, suites_list.shift, m_titles, matrice_key, options: options) if options[:no_print]
print compare_matrixes(m_list, suites_list.shift, m_titles, matrice_key, options: options)
+ return ''
end
# big size first
--
2.23.0
2
1
remove h5ai link from upper right corner of result page
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
container/srv-http/root/srv/_h5ai/public/js/scripts.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
index f4f2f84..62942b8 100755
--- a/container/srv-http/root/srv/_h5ai/public/js/scripts.js
+++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
@@ -1028,7 +1028,7 @@
i = r.dom,
o = "body",
a =
- '<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',
+ '<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n </a>\n </div>',
s =
'<div id="mainrow">\n <div id="content"></div>\n </div>',
c = function() {
@@ -6274,4 +6274,4 @@
})()
));
},
-]);
\ No newline at end of file
+]);
--
2.23.0
2
3
[Why]
It's inconvenient for read and modify the file
container/srv-http/root/srv/_h5ai/public/js/script.js
because of the file had write as one line
[How]
Use the code formatter prettier format it
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
.../root/srv/_h5ai/public/js/scripts.js | 6282 ++++++++++++++++-
1 file changed, 6277 insertions(+), 5 deletions(-)
diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
index 664fd61..f4f2f84 100755
--- a/container/srv-http/root/srv/_h5ai/public/js/scripts.js
+++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js
@@ -1,5 +1,6277 @@
-/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */
-!function(e){function t(e,t){if(!t)throw i.className=r,new Error(r+": "+e)}function n(e){return"function"==typeof e}if(!e||e.window!==e||!e.document)throw new Error("no-window");var r="no-browser",i=e.document.documentElement;i.className="",t("console",e.console&&n(e.console.log)),t("assign",e.Object&&n(e.Object.assign)),t("promise",n(e.Promise)),t("xhr",e.XMLHttpRequest)}(this),function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";n(1)},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=r.awaitReady,a=n(7),s=i("script[data-module]").attr("data-module"),c={action:"get",setup:!0,options:!0,types:!0};if("index"===s)c.theme=!0,c.langs=!0;else{if("info"!==s)throw new Error("no-main-module: '"+s+"'");c.refresh=!0}a._update(c).then(function(){return o()}).then(function(){return n(9)("./"+s)})},function(e,t,n){"use strict";e.exports=Object.assign({},n(3),n(4),n(5),n(6))},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e){return void 0!==e&&null!==e},i=function(e,t){return("undefined"==typeof e?"undefined":n(e))===t},o=function(e){return i(e,"string")},a=function(e){return i(e,"function")},s=function(e){return i(e,"number")},c=function(e){return e&&e.hasOwnProperty("length")},u=function(e){return!e||o(e)?[]:(c(e)&&(e=Array.from(e)),Object.keys(e))},l=function(e){return u(e).map(function(t){return e[t]})},f=function(e,t){return u(e).forEach(function(n){return t(e[n],n)})},d=function(e,t){return l(e).filter(t)},p=function(e,t){return l(e).map(t)},h=function(e,t){return l(e).indexOf(t)>=0},g=function(e){return d(e,function(e){return!!e})},m=function(e,t){return!!e&&e instanceof t},v=function(e){return Array.from(e)},b=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)<0})},w=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)>=0})},y=function(e,t){return e<t?-1:e>t?1:0},x=function(e,t){var n=a(t)?t:function(e){return e[t]},r=function(e,t){return y(n(e),n(t))};return l(e).sort(r)},k=function(e,t){var n=null;return function(){clearTimeout(n),n=setTimeout(e,t)}};e.exports={is:r,isStr:o,isFn:a,isNum:s,hasLength:c,keys:u,values:l,each:f,filter:d,map:p,includes:h,compact:g,isInstanceOf:m,toArray:v,difference:b,intersection:w,cmp:y,sortBy:x,debounce:k}},function(e,t,n){(function(t){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=n(3),a=o.each,s=o.filter,c=o.hasLength,u=o.is,l=o.isStr,f=o.map,d=o.isInstanceOf,p=o.toArray,h=t.window,g=h.document,m=function(){var e=function(e){return g.createElement(e)},t=[[/^<t(head|body|foot)|^<c(ap|olg)/i,e("table")],[/^<col/i,e("colgroup")],[/^<tr/i,e("tbody")],[/^<t[dh]/i,e("tr")]],n=e("div"),r=function(e){var r=!0,o=!1,a=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done);r=!0){var u=s.value,l=i(u,2),f=l[0],d=l[1];if(f.test(e))return d}}catch(e){o=!0,a=e}finally{try{!r&&c.return&&c.return()}finally{if(o)throw a}}return n};return function(e){var t=r(e);t.innerHTML=e;var n=p(t.childNodes);return a(n,function(e){return t.removeChild(e)}),t.innerHTML="",n}}(),v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;try{return p(t.querySelectorAll(e))}catch(e){return[]}},b=function(e){return d(e,h.Element)},w=function(e){return d(e,h.Document)},y=function(e){return u(e)&&e.window===e&&w(e.document)},x=function(e){return b(e)||w(e)||y(e)},k=function(e,t,n){return e.addEventListener(t,n)},_=function(e,t,n){return e.removeEventListener(t,n)},C=new Promise(function(e){/^(i|c|loade)/.test(g.readyState)?e():k(g,"DOMContentLoaded",function(){return e()})}),S=function(){return C},A=new Promise(function(e){k(h,"load",function(){return e()})}),T=function(){return A},E=function e(t){if(d(t,e))return t;var n=void 0;return l(t)?(t=t.trim(),n="<"===t[0]?m(t):v(t)):n=x(t)?[t]:c(t)?t:[t],n=s(n,x),Object.assign(Object.create(e.prototype),n,{length:n.length})};E.prototype={constructor:E,each:function(e){return a(this,e),this},map:function(e){return f(this,e)},find:function(e){var t;return E((t=[]).concat.apply(t,r(this.map(function(t){return v(e,t)}))))},on:function(e,t){return this.each(function(n){return k(n,e,t)})},off:function(e,t){return this.each(function(n){return _(n,e,t)})},attr:function(e,t){return void 0===t?this.length?this[0].getAttribute(e):void 0:this.each(function(n){return n.setAttribute(e,t)})},rmAttr:function(e){return this.each(function(t){return t.removeAttribute(e)})},prop:function(e,t){return void 0===t?this.length?this[0][e]:void 0:this.each(function(n){n[e]=t})},rmProp:function(e){return this.each(function(t){return delete t[e]})},val:function(e){return void 0===e?this.length?this[0].value:void 0:this.each(function(t){t.value=e})},html:function(e){return void 0===e?this.map(function(e){return e.innerHTML}).join(""):this.each(function(t){t.innerHTML=e})},text:function(e){return void 0===e?this.map(function(e){return e.textContent}).join(""):this.each(function(t){t.textContent=e})},clr:function(){return this.html("")},rm:function(){return this.each(function(e){var t=e.parentNode;t&&t.removeChild(e)})},rpl:function(e){return this.each(function(t){var n=t.parentNode;n&&n.replaceChild(E(e)[0],t)})},app:function(e){return this.each(function(t){E(e).each(function(e){return t.appendChild(e)})})},appTo:function(e){return E(e).app(this),this},pre:function(e){return this.each(function(t){E(e).each(function(e){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)})})},preTo:function(e){return E(e).pre(this),this},cls:function(){return arguments.length?(this.each(function(e){e.className=""}),this.addCls.apply(this,arguments)):this.length?p(this[0].classList):[]},hasCls:function(e){return p(this).every(function(t){return t.classList.contains(e)})},addCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},rmCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.remove(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},tglCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.contains(s)?e.classList.remove(s):e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},parent:function(){return E(this.map(function(e){return e.parentNode}))},children:function(){var e;return E((e=[]).concat.apply(e,r(this.map(function(e){return p(e.children)}))))},hide:function(){return this.addCls("hidden")},show:function(){return this.rmCls("hidden")},isHidden:function(){return this.hasCls("hidden")},css:function(e){return this.each(function(t){return Object.assign(t.style,e)})}},e.exports={awaitReady:S,awaitLoad:T,dom:E}}).call(t,function(){return this}())},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,o=/^0x[0-9a-f]+$/i,a=/^0/,s=function(e,t){var s=String(e).trim(),c=String(t).trim(),u=s.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),l=c.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),f=parseInt(s.match(o),16)||1!==u.length&&s.match(i)&&Date.parse(s),d=parseInt(c.match(o),16)||f&&c.match(i)&&Date.parse(c)||null;if(d){if(f<d)return-1;if(f>d)return 1}for(var p=0,h=Math.max(u.length,l.length);p<h;p+=1){var g=!(u[p]||"").match(a)&&parseFloat(u[p])||u[p]||0,m=!(l[p]||"").match(a)&&parseFloat(l[p])||l[p]||0;if(isNaN(g)!==isNaN(m))return isNaN(g)?1:-1;if(("undefined"==typeof g?"undefined":n(g))!==("undefined"==typeof m?"undefined":n(m))&&(g=String(g),m=String(m)),g<m)return-1;if(g>m)return 1}return 0};e.exports={naturalCmp:s}},function(e,t){"use strict";var n=function(e){return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g,"\\$&")},r=function(e,t){return t?"re:"===e.substr(0,3)?e.substr(3):e.trim().split(/\s+/).map(function(e){return e.split("").map(function(e){return n(e)}).join(".*?")}).join("|"):n(e)};e.exports={parsePattern:r}},function(e,t,n){"use strict";var r=n(8),i=r.request,o=e.exports={_update:function(e){return i(e).then(function(e){return Object.assign(o,e)})}}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.dom,a=t.window.XMLHttpRequest,s=function(e){return new Promise(function(t){var n=new a,r=function(){if(n.readyState===a.DONE)try{t(JSON.parse(n.responseText))}catch(e){t({err:e,txt:n.responseText})}};n.open("POST","?",!0),n.onreadystatechange=r,n.setRequestHeader("Content-Type","application/json;charset=utf-8"),n.send(JSON.stringify(e))})},c=function(e){var t=o('<form method="post" action="?" style="display:none;"/>');i(e,function(e,n){o('<input type="hidden"/>').attr("name",n).attr("value",e).appTo(t)}),t.appTo("body"),t[0].submit(),t.rm()};e.exports={request:s,formRequest:c}}).call(t,function(){return this}())},function(e,t,n){function r(e){return n(i(e))}function i(e){return o[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var o={"./index":10,"./index.js":10,"./info":50,"./info.js":50};r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=9},function(e,t,n){(function(e){"use strict";n(11),n(24),n(25),n(26),n(27),n(29),n(30),n(31),n(32),n(34),n(36),n(37),n(44),n(45),n(46),n(47),n(48),n(49);var t=e.window.document.location.href;n(20).setLocation(t,!0)}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(13),c=n(14),u=n(15),l=n(17),f=n(18),d=Object.assign({modeToggle:!1},c.view),p='<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',h='<div id="viewmode-[MODE]" class="button mode">\n <img src="'+s.image("view-[MODE]")+'" alt="viewmode-[MODE]"/>\n </div>',g='<input id="viewmode-size" type="range" min="0" max="0" value="0">',m='<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',v=void 0,b=void 0,w=function(e,t){o("#viewmode-settings .mode").rmCls("active"),o("#viewmode-"+e).addCls("active"),o("#viewmode-size").val(b.indexOf(t)),"next"===d.modeToggle&&(e=v[(v.indexOf(e)+1)%v.length]),o("#viewmode-toggle img").attr("src",s.image("view-"+e))},y=function(){if(!(v.length<2&&b.length<2)){var e=o(p);if(v.length>1&&i(v,function(t){o(h.replace(/\[MODE\]/g,t)).on("click",function(){f.setMode(t)}).appTo(e)}),b.length>1){var t=b.length-1;o(g).attr("max",t).on("input",function(e){return f.setSize(b[e.target.valueAsNumber])}).on("change",function(e){return f.setSize(b[e.target.valueAsNumber])}).appTo(e)}e.appTo(u.$el)}},x=function(){var e=f.getMode(),t=(v.indexOf(e)+1)%v.length,n=v[t];f.setMode(n)},k=function(){d.modeToggle&&v.length>1&&o(m).on("click",x).appTo(l.$toolbar)},_=function(){v=f.getModes(),b=f.getSizes(),y(),k(),w(f.getMode(),f.getSize()),a.sub("view.mode.changed",w)};_()},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.isStr,o=r.isFn,a=r.dom,s={},c=function(e,t){i(e)&&o(t)&&(s[e]||(s[e]=[]),s[e].push(t))},u=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];i(e)&&s[e]&&s[e].forEach(function(t){t.apply(e,n)})};a(t.window).on("resize",function(){return u("resize")}),e.exports={sub:c,pub:u}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.includes,o=n(7),a=n(14),s=a.publicHref+"images/",c=s+"ui/",u=s+"themes/",l=u+"default/",f=["file","folder","folder-page","folder-parent","ar","aud","bin","img","txt","vid","x"],d=function(e){return c+e+".svg"},p=function(e){var t=(e||"").split("-")[0],n=o.theme[e]||o.theme[t];return n?u+n:i(f,e)?l+e+".svg":i(f,t)?l+t+".svg":l+"file.svg"};e.exports={image:d,icon:p}},function(e,t,n){"use strict";var r=n(7);e.exports=Object.assign({},r.options,{publicHref:r.setup.PUBLIC_HREF,rootHref:r.setup.ROOT_HREF})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(13),a=n(14),s=n(16),c=n(17),u=Object.assign({disableSidebar:!1},a.view),l="sidebarIsVisible",f='<div id="sidebar"></div>',d='<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',p=function(){var e=i(f).hide(),t=i(d),n=t.find("img"),r=function(r){var i=s.get(l);r&&(i=!i,s.put(l,i)),i?(t.addCls("active"),n.attr("src",o.image("back")),e.show()):(t.rmCls("active"),n.attr("src",o.image("sidebar")),e.hide())};return u.disableSidebar||(e.appTo(c.$mainrow),t.appTo(c.$toolbar).on("click",function(){return r(!0)}),r()),{$el:e}};e.exports=p()},function(e,t){(function(t){"use strict";var n=t.window.localStorage,r="_h5ai",i=function(){try{return JSON.parse(n[r])}catch(e){}return{}},o=function(e){n[r]=JSON.stringify(e)},a=function(e,t){var n=i();n[e]=t,o(n)},s=function(e){return i()[e]};e.exports={put:a,get:s}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o="body",a='<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',s='<div id="mainrow">\n <div id="content"></div>\n </div>',c=function(){var e=i(o).attr("id","root").clr().app(a).app(s);return{$root:e,$topbar:e.find("#topbar"),$toolbar:e.find("#toolbar"),$flowbar:e.find("#flowbar"),$mainrow:e.find("#mainrow"),$content:e.find("#content")}};e.exports=c()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=r.intersection,c=r.dom,u=n(12),l=n(19),f=n(20),d=n(13),p=n(16),h=n(14),g=n(17),m=["details","grid","icons"],v=[20,40,60,80,100,150,200,250,300,350,400],b=Object.assign({binaryPrefix:!1,hideFolders:!1,hideParentFolder:!1,maxIconSize:40,modes:m,setParentFolderLabels:!1,sizes:v},h.view),w=b.sizes.sort(function(e,t){return e-t}),y=s(b.modes,m),x="view",k='<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',_='<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',C=c(k),S=C.find("#items"),A=C.find("#view-hint"),T=function(e,t,n){return Math.min(n,Math.max(t,e))},E=function(e){var t=T(e,20,80),n=T(e,40,160),r=T(e,80,1e3),i=Math.round(4*r/3),o="!important;",a="#view.view-details.view-size-"+e,s="#view.view-grid.view-size-"+e,c="#view.view-icons.view-size-"+e,u=[a+" .item .label {line-height: "+(t+14)+"px "+o+"}",a+" .item .date {line-height: "+(t+14)+"px "+o+"}",a+" .item .size {line-height: "+(t+14)+"px "+o+"}",a+" .square {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .square img {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .label {margin-left: "+(t+32)+"px "+o+"}",s+" .item .label {line-height: "+n+"px "+o+"}",s+" .square {width: "+n+"px "+o+" height: "+n+"px "+o+"}",s+" .square img {width: "+n+"px "+o+" height: "+n+"px "+o+"}",c+" .item {width: "+i+"px "+o+"}",c+" .landscape {width: "+i+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape img {width: "+r+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape .thumb {width: "+i+"px "+o+"}"];return u.join("\n")},M=function(){var e=o(w,function(e){return E(e)});e.push("#view .icon img {max-width: "+b.maxIconSize+"px; max-height: "+b.maxIconSize+"px;}"),c("<style></style>").text(e.join("\n")).appTo("head")},D=function(e,t){var n=p.get(x);e=e||n&&n.mode,t=t||n&&n.size,e=a(b.modes,e)?e:b.modes[0],t=a(b.sizes,t)?t:b.sizes[0],p.put(x,{mode:e,size:t}),i(y,function(t){t===e?C.addCls("view-"+t):C.rmCls("view-"+t)}),i(w,function(e){e===t?C.addCls("view-size-"+e):C.rmCls("view-size-"+e)}),u.pub("view.mode.changed",e,t)},P=function(){return y},z=function(){return p.get(x).mode},L=function(e){return D(e,null)},$=function(){return w},H=function(){return p.get(x).size},O=function(e){return D(null,e)},B=function(e){var t=e.target._item;u.pub("item.mouseenter",t)},R=function(e){var t=e.target._item;u.pub("item.mouseleave",t)},N=function(e){var t=c(_),n=t.find("a"),r=t.find(".icon img"),i=t.find(".label"),o=t.find(".date"),a=t.find(".size");return t.addCls(e.isFolder()?"folder":"file").on("mouseenter",B).on("mouseleave",R),f.setLink(n,e),i.text(e.label).attr("title",e.label),o.attr("data-time",e.time).text(l.formatDate(e.time)),a.attr("data-bytes",e.size).text(l.formatSize(e.size)),e.icon=d.icon(e.type),e.isFolder()&&!e.isManaged&&(t.addCls("page"),e.icon=d.icon("folder-page")),e.isCurrentParentFolder()&&(e.icon=d.icon("folder-parent"),b.setParentFolderLabels||i.addCls("l10n-parentDirectory"),t.addCls("folder-parent")),r.attr("src",e.icon).attr("alt",e.type),e.$view=t,t[0]._item=e,t},I=function(){var e=S.find(".item").length===S.find(".folder-parent").length;e?A.show():A.hide()},j=function(e){var t=o(S.find(".item"),function(e){return e._item});S.find(".item").rm(),i(e,function(e){return S.app(N(e))}),g.$content[0].scrollLeft=0,g.$content[0].scrollTop=0,I(),u.pub("view.changed",e,t)},F=function(e,t){i(e,function(e){N(e).hide().appTo(S).show()}),i(t,function(e){e.$view.hide().rm()}),I(),u.pub("view.changed",e,t)},q=function(e){A.rmCls().addCls("l10n-"+e),I()},Y=function(e){e||(e=f.getItem());var t=[];e.parent&&!b.hideParentFolder&&t.push(e.parent),i(e.content,function(e){e.isFolder()&&b.hideFolders||t.push(e)}),q("empty"),j(t)},Z=function(e,t,n){var r=[];i(t,function(e){e.isFolder()&&b.hideFolders||r.push(e)}),q("empty"),F(r,n)},U=function(){var e=C[0].offsetWidth;C.rmCls("width-0").rmCls("width-1"),e<320?C.addCls("width-0"):e<480&&C.addCls("width-1")},V=function(){M(),D(),C.appTo(g.$content),A.hide(),l.setDefaultMetric(b.binaryPrefix),u.sub("location.changed",Y),u.sub("location.refreshed",Z),u.sub("resize",U),U()};V(),e.exports={$el:C,setItems:j,changeItems:F,setLocation:Y,setHint:q,getModes:P,getMode:z,setMode:L,getSizes:$,getSize:H,setSize:O}},function(e,t,n){"use strict";var r=n(2),i=r.isNum,o={t:1e3,k:1e3,u:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},a={t:1024,k:1024,u:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},s=o,c=[[/YYYY/,"Y",4],[/YY/,"Y",2],[/Y/,"Y",0],[/MM/,"M",2],[/M/,"M",0],[/DD/,"D",2],[/D/,"D",0],[/HH/,"H",2],[/H/,"H",0],[/mm/,"m",2],[/m/,"m",0],[/ss/,"s",2],[/s/,"s",0]],u="YYYY-MM-DD HH:mm",l=function(e){s=e?a:o},f=function(e,t){if(t=t||s,!i(e)||e<0)return"";for(var n=0,r=t.u.length-1;e>=t.t&&n<r;)e/=t.k,n+=1;return(n<=1?Math.round(e):e.toFixed(1)).toString()+" "+t.u[n]},d=function(e){u=e},p=function(e,t){var n=String(e);return t&&(n=("000"+n).substr(-t)),n},h=function(e,t){if(!e||!i(e))return"";t=t||u;var n=new Date(e),r={Y:n.getFullYear(),M:n.getMonth()+1,D:n.getDate(),H:n.getHours(),m:n.getMinutes(),s:n.getSeconds()};return c.forEach(function(e){t=t.replace(e[0],p(r[e[1]],e[2]))}),t};e.exports={setDefaultMetric:l,formatSize:f,setDefaultDateFormat:d,formatDate:h}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.values,a=r.difference,s=n(8),c=s.request,u=n(14),l=n(12),f=n(21),d=t.window,p=d.document,h=Object.assign({fastBrowsing:!0,unmanagedInNewWindow:!0},u.view),g=h.fastBrowsing?d.history:null,m=/^.*:\/\/[^\/]*|[^\/]*$/g,v=[[/\/+/g,"/"],[/ /g,"%20"],[/!/g,"%21"],[/#/g,"%23"],[/\$/g,"%24"],[/&/g,"%26"],[/'/g,"%27"],[/\(/g,"%28"],[/\)/g,"%29"],[/\*/g,"%2A"],[/\+/g,"%2B"],[/\,/g,"%2C"],[/:/g,"%3A"],[/;/g,"%3B"],[/\=/g,"%3D"],[/\?/g,"%3F"],[/@/g,"%40"],[/\[/g,"%5B"],[/\]/g,"%5D"]],b=null,w=function(e){return v.reduce(function(e,t){return e.replace(t[0],t[1])},e)},y=function(e){return e.replace(m,"")},x=function(){var e="/a b",t=p.createElement("a");return t.href=e,y(t.href)===e}(),k=function(e){var t=p.createElement("a"),n=void 0;return t.href=e,n=y(t.href),x&&(n=encodeURIComponent(n).replace(/%2F/gi,"/")),w(n)},_=function(){return p.domain},C=function(){return b},S=function(){return n(22).get(b)},A=function(){return c({action:"get",items:{href:b,what:1}}).then(function(e){var t=n(22),r=t.get(b);if(e){var o={};i(e.items,function(e){var n=t.get(e);o[n.absHref]=!0}),i(r.content,function(e){o[e.absHref]||t.remove(e.absHref)})}return r})},T=function(){var e=S(),t=o(e.content);l.pub("location.beforeRefresh"),A().then(function(){var n=o(e.content),r=a(n,t),i=a(t,n);l.pub("location.refreshed",e,r,i)})},E=function(e,t){l.pub("location.beforeChange"),e=k(e),b!==e&&(b=e,g&&(t?g.replaceState({absHref:b},"",b):g.pushState({absHref:b},"",b)));var n=S();n.isLoaded?(l.pub("location.changed",n),T()):(f.set("loading..."),A().then(function(){n.isLoaded=!0,f.set(),l.pub("location.changed",n)}))},M=function(e,t){e.attr("href",t.absHref),g&&t.isFolder()&&t.isManaged&&e.on("click",function(e){return E(t.absHref),e.preventDefault(),!1}),h.unmanagedInNewWindow&&!t.isManaged&&e.attr("target","_blank")},D=function(e){e.state&&e.state.absHref&&E(e.state.absHref,!0)};d.onpopstate=g?D:null,e.exports={forceEncoding:w,getDomain:_,getAbsHref:C,getItem:S,setLocation:E,refresh:T,setLink:M}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(17),a=function(){var e=i('<div id="notification"></div>').hide().appTo(o.$root),t=function(t){t?e.html(t).show():e.hide()};return{set:t}};e.exports=a()},function(e,t,n){"use strict";var r=n(2),i=r.keys,o=r.each,a=r.filter,s=r.sortBy,c=r.isStr,u=r.isNum,l=n(8),f=n(20),d=n(14),p=n(23),h=/\/$/,g=/^(.*\/)([^\/]+\/?)$/,m={},v=function(e,t){return c(e)&&e.startsWith(t)},b=function(e){e=e.replace(h,"");try{e=decodeURIComponent(e)}catch(e){}return e},w=function(e){if("/"===e)return{parent:null,name:"/"};var t=g.exec(e);if(!t)return null;var n={parent:t[1],name:t[2]};return n.parent&&!v(n.parent,d.rootHref)&&(n.parent=null),n},y=function(e){if(c(e))e={href:e};else if(!e||!c(e.href))return null;var t=f.forceEncoding(e.href);if(!v(t,d.rootHref))return null;var n=m[t]||_(t);return u(e.time)&&(n.time=e.time),u(e.size)&&(n.size=e.size),e.managed&&(n.isManaged=!0),e.fetched&&(n.isContentFetched=!0),n},x=function e(t){t=f.forceEncoding(t);var n=m[t];n&&(delete m[t],n.parent&&delete n.parent.content[n.absHref],o(n.content,function(t){e(t.absHref)}))},k=function(e){return new Promise(function(t){var n=y(e);n.isContentFetched?t(n):l.request({action:"get",items:{href:n.absHref,what:1}}).then(function(e){e.items&&o(e.items,function(e){y(e)}),t(n)})})},_=function e(t){var n=w(t),r=Object.assign(Object.create(e.prototype),{absHref:t,type:p.getType(t),label:b("/"===t?f.getDomain():n.name),time:null,size:null,parent:null,isManaged:null,content:{}});return m[t]=r,n.parent&&(r.parent=y(n.parent),r.parent.content[r.absHref]=r,i(r.parent.content).length>1&&(r.parent.isContentFetched=!0)),r};_.prototype={constructor:_,isFolder:function(){return h.test(this.absHref)},isCurrentFolder:function(){return this.absHref===f.getAbsHref()},isInCurrentFolder:function(){return!!this.parent&&this.parent.isCurrentFolder()},isCurrentParentFolder:function(){var e=y(f.getAbsHref());return!!e&&this===e.parent},isDomain:function(){return"/"===this.absHref},isRoot:function(){return this.absHref===d.rootHref},isEmpty:function(){return 0===i(this.content).length},fetchContent:function(){return k(this.absHref)},getCrumb:function(){for(var e=this,t=[e];e.parent;)e=e.parent,t.unshift(e);return t},getSubfolders:function(){return s(a(this.content,function(e){return e.isFolder()}),function(e){return e.label.toLowerCase()})},getStats:function(){var e=0,t=0;o(this.content,function(n){n.isFolder()?e+=1:t+=1});for(var n=0,r=this;r.parent;)n+=1,r=r.parent;return{folders:e,files:t,depth:n}}},e.exports={get:y,remove:x}},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=n(7),s=/\/$/,c={},u=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g,"\\$&")},l=function(e){i(e,function(e,t){var n="^("+o(e,function(e){return"("+u(e).replace(/\*/g,".*")+")"}).join("|")+")$";c[t]=new RegExp(n,"i")})},f=function(e){if(s.test(e))return"folder";var t=e.lastIndexOf("/"),n=t>=0?e.substr(t+1):e,r=void 0;return i(c,function(e,t){c[t].test(n)&&(r=t)}),r?r:"file"};l(Object.assign({},a.types)),e.exports={getType:f}},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(20),i=n(14),o=e.window,a=Object.assign({enabled:!1,interval:5e3},i.autorefresh),s=null,c=function(){r.refresh()},u=function(){o.clearTimeout(s)},l=function(){o.clearTimeout(s),s=o.setTimeout(c,a.interval)},f=function(){a.enabled&&(a.interval=Math.max(1e3,a.interval),t.sub("location.beforeChange",u),t.sub("location.beforeRefresh",u),t.sub("location.changed",l),t.sub("location.refreshed",l))};f()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(13),s=n(14),c=Object.assign({enabled:!1},s.contextmenu),u='<div id="cm-overlay"></div>',l='<div class="cm-panel"><ul></ul></div>',f='<li class="cm-sep"></li>',d='<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',p='<li class="cm-label"><span class="cm-text"></span></li>',h=function(e){for(;!e._cmId&&e.parentNode;)e=e.parentNode;return e._cmId},g=function(e){var t=o(u),n=function(n){n.stopPropagation(),n.preventDefault();var r=h(n.target);n.target!==t[0]&&void 0===r||(t.rm(),e(r))};return t.on("contextmenu",n).on("click",n)},m=function(e){var t=o(l),n=t.find("ul"),r=void 0;return i(e,function(e){"-"===e.type?o(f).appTo(n):"l"===e.type?o(p).appTo(n).find(".cm-text").text(e.text):"e"===e.type&&(r=o(d).appTo(n),r[0]._cmId=e.id,r.find(".cm-text").text(e.text),e.icon?r.find(".cm-icon img").attr("src",a.icon(e.icon)):r.find(".cm-icon").addCls("no-icon"))}),t},v=function(e,t,n,r){var i=4;t.css({left:0,top:0,opacity:0}),e.show();var o=e[0].getBoundingClientRect(),a=t[0].getBoundingClientRect(),s=o.left,c=o.top,u=o.width,l=o.height,f=a.width,d=a.height,p=n,h=r;f>u-2*i&&(p=i,f=u-2*i),d>l-2*i&&(h=i,d=l-2*i),p<s+i&&(p=s+i),p+f>s+u-i&&(p=s+u-i-f),h<c+i&&(h=c+i),h+d>c+l-i&&(h=c+l-i-d),t.css({left:p+"px",top:h+"px",width:f+"px",height:d+"px",opacity:1})},b=function(e,t,n,r){var i=g(r),o=m(n);i.hide().app(o).appTo("body"),v(i,o,e,t)},w=function(){if(c.enabled){var e=[{type:"e",id:"e1",text:"testing context menus"},{type:"e",id:"e2",text:"another entry"},{type:"e",id:"e3",text:"one with icon",icon:"folder"},{type:"-"},{type:"e",id:"e4",text:"one with icon",icon:"x"},{type:"e",id:"e5",text:"one with icon",icon:"img"}];o("#view").on("contextmenu",function(t){t.preventDefault(),b(t.pageX,t.pageY,e)})}};w()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(20),c=n(13),u=n(14),l=n(17),f=Object.assign({enabled:!1},u.crumb),d='<div id="crumbbar"></div>',p='<a class="crumb">\n <img class="sep" src="'+c.image("crumb")+'" alt=">"/>\n <span class="label"></span>\n </a>',h='<img class="hint" src="'+c.icon("folder-page")+'" alt="has index page"/>',g=function(e){var t=o(p);return s.setLink(t,e),t.find(".label").text(e.label),e.isCurrentFolder()&&t.addCls("active"),e.isManaged||t.app(o(h)),e._$crumb=t,t[0]._item=e,t},m=function(e){var t=e._$crumb,n=o("#crumbbar");t&&t.parent()[0]===n[0]?(n.children().rmCls("active"),t.addCls("active")):(n.clr(),i(e.getCrumb(),function(e){n.app(g(e))}))},v=function(){f.enabled&&(o(d).appTo(l.$flowbar),a.sub("location.changed",m))};v()},function(e,t,n){"use strict";var r=n(28),i=n(2),o=i.each,a=i.dom,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1},u.custom),f=function(e,t){var n=a("#content-"+t);if(e&&e[t].content){var i=e[t].content;"md"===e[t].type&&(i=r(i)),n.html(i).show()}else n.hide()},d=function(e){s.request({action:"get",custom:e.absHref}).then(function(e){var t=e&&e.custom;o(["header","footer"],function(e){return f(t,e)})})},p=function(){l.enabled&&(a('<div id="content-header"></div>').hide().preTo("#content"),a('<div id="content-footer"></div>').hide().appTo("#content"),c.sub("location.changed",d))};p()},function(e,t,n){(function(t){!function(t){"use strict";function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||b.defaults,this.rules=w.normal,this.options.pedantic?this.rules=w.pedantic:this.options.gfm&&(this.options.tables?this.rules=w.tables:this.rules=w.gfm)}function r(e,t){if(this.options=t||b.defaults,this.links=e,this.rules=y.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=y.pedantic:this.options.gfm&&(this.options.breaks?this.rules=y.breaks:this.rules=y.gfm)}function i(e){this.options=e||b.defaults}function o(){}function a(e){this.tokens=[],this.token=null,this.options=e||b.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new s}function s(){this.seen={}}function c(e,t){if(t){if(c.escapeTest.test(e))return e.replace(c.escapeReplace,function(e){return c.replacements[e]})}else if(c.escapeTestNoEncode.test(e))return e.replace(c.escapeReplaceNoEncode,function(e){return c.replacements[e]});return e}function u(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function l(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=n.source||n,n=n.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function f(e,t,n){if(e){try{var r=decodeURIComponent(u(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!k.test(n)&&(n=d(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}function d(e,t){return x[" "+e]||(/^[^:]+:\/*[^\/]*$/.test(e)?x[" "+e]=e+"/":x[" "+e]=m(e,"/",!0)),e=x[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^\/]*)[\s\S]*/,"$1")+t:e+t}function p(){}function h(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function g(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r;
-return r?"|":" |"}),r=n.split(/ \|/),i=0;if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace(/\\\|/g,"|");return r}function m(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var i=e.charAt(e.length-r-1);if(i!==t||n){if(i===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function v(e,t){if(e.indexOf(t[1])===-1)return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return-1}function b(e,t,r){if("undefined"==typeof e||null===e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof t){r||(r=t,t=null),t=h({},b.defaults,t||{});var i,o,s=t.highlight,u=0;try{i=n.lex(e,t)}catch(e){return r(e)}o=i.length;var l=function(e){if(e)return t.highlight=s,r(e);var n;try{n=a.parse(i,t)}catch(t){e=t}return t.highlight=s,e?r(e):r(null,n)};if(!s||s.length<3)return l();if(delete t.highlight,!o)return l();for(;u<i.length;u++)!function(e){return"code"!==e.type?--o||l():s(e.text,e.lang,function(t,n){return t?l(t):null==n||n===e.text?--o||l():(e.text=n,e.escaped=!0,void(--o||l()))})}(i[u])}else try{return t&&(t=h({},b.defaults,t)),a.parse(n.lex(e,t),t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(t||b.defaults).silent)return"<p>An error occurred:</p><pre>"+c(e.message+"",!0)+"</pre>";throw e}}var w={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:p,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:p,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:p,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};w._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,w._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,w.def=l(w.def).replace("label",w._label).replace("title",w._title).getRegex(),w.bullet=/(?:[*+-]|\d{1,9}\.)/,w.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,w.item=l(w.item,"gm").replace(/bull/g,w.bullet).getRegex(),w.list=l(w.list).replace(/bull/g,w.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+w.def.source+")").getRegex(),w._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",w._comment=/<!--(?!-?>)[\s\S]*?-->/,w.html=l(w.html,"i").replace("comment",w._comment).replace("tag",w._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),w.paragraph=l(w.paragraph).replace("hr",w.hr).replace("heading",w.heading).replace("lheading",w.lheading).replace("tag",w._tag).getRegex(),w.blockquote=l(w.blockquote).replace("paragraph",w.paragraph).getRegex(),w.normal=h({},w),w.gfm=h({},w.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),w.gfm.paragraph=l(w.paragraph).replace("(?!","(?!"+w.gfm.fences.source.replace("\\1","\\2")+"|"+w.list.source.replace("\\1","\\3")+"|").getRegex(),w.tables=h({},w.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),w.pedantic=h({},w.normal,{html:l("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",w._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),n.rules=w,n.lex=function(e,t){var r=new n(t);return r.lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,t){e=e.replace(/^ +$/gm,"");for(var n,r,i,o,a,s,c,u,l,f,d,p,h,v,b,y;e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:m(i,"\n")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2]?i[2].trim():i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d],s.header.length);this.tokens.push(s)}else if(i=this.rules.hr.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"hr"});else if(i=this.rules.blockquote.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"blockquote_start"}),i=i[0].replace(/^ *> ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),o=i[2],v=o.length>1,c={type:"list_start",ordered:v,start:v?+o:"",loose:!1},this.tokens.push(c),i=i[0].match(this.rules.item),u=[],n=!1,h=i.length,d=0;d<h;d++)s=i[d],f=s.length,s=s.replace(/^ *([*+-]|\d+\.) */,""),~s.indexOf("\n ")&&(f-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+f+"}","gm"),"")),d!==h-1&&(a=w.bullet.exec(i[d+1])[0],(o.length>1?1===a.length:a.length>1||this.options.smartLists&&a!==o)&&(e=i.slice(d+1).join("\n")+e,d=h-1)),r=n||/\n\n(?!\s*$)/.test(s),d!==h-1&&(n="\n"===s.charAt(s.length-1),r||(r=n)),r&&(c.loose=!0),b=/^\[[ xX]\] /.test(s),y=void 0,b&&(y=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,"")),l={type:"list_item_start",task:b,checked:y,loose:r},u.push(l),this.tokens.push(l),this.token(s,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(h=u.length,d=0;d<h;d++)u[d].loose=!0;this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(t&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),p=i[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[p]||(this.tokens.links[p]={href:i[2],title:i[3]});else if(t&&(i=this.rules.table.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d].replace(/^ *\| *| *\| *$/g,""),s.header.length);this.tokens.push(s)}else if(i=this.rules.lheading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:"="===i[2]?1:2,text:i[1]});else if(t&&(i=this.rules.paragraph.exec(e)))e=e.substring(i[0].length),this.tokens.push({type:"paragraph",text:"\n"===i[1].charAt(i[1].length-1)?i[1].slice(0,-1):i[1]});else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"text",text:i[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var y={escape:/^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:p,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:p,text:/^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/};y._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",y.em=l(y.em).replace(/punctuation/g,y._punctuation).getRegex(),y._escapes=/\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,y._email=/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,y.autolink=l(y.autolink).replace("scheme",y._scheme).replace("email",y._email).getRegex(),y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,y.tag=l(y.tag).replace("comment",w._comment).replace("attribute",y._attribute).getRegex(),y._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,y._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/,y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,y.link=l(y.link).replace("label",y._label).replace("href",y._href).replace("title",y._title).getRegex(),y.reflink=l(y.reflink).replace("label",y._label).getRegex(),y.normal=h({},y),y.pedantic=h({},y.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:l(/^!?\[(label)\]\((.*?)\)/).replace("label",y._label).getRegex(),reflink:l(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",y._label).getRegex()}),y.gfm=h({},y.normal,{escape:l(y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:l(y.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),y.gfm.url=l(y.gfm.url,"i").replace("email",y.gfm._extended_email).getRegex(),y.breaks=h({},y.gfm,{br:l(y.br).replace("{2,}","*").getRegex(),text:l(y.gfm.text).replace("{2,}","*").getRegex()}),r.rules=y,r.output=function(e,t,n){var i=new r(t,n);return i.output(e)},r.prototype.output=function(e){for(var t,n,i,o,a,s,u="";e;)if(a=this.rules.escape.exec(e))e=e.substring(a[0].length),u+=c(a[1]);else if(a=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(a[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),e=e.substring(a[0].length),u+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):c(a[0]):a[0];else if(a=this.rules.link.exec(e)){var l=v(a[2],"()");if(l>-1){var f=a[2].length-l;a[2]=a[2].substring(0,l),a[0]=a[0].substring(0,a[0].length-f)}e=e.substring(a[0].length),this.inLink=!0,i=a[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i),t?(i=t[1],o=t[3]):o=""):o=a[3]?a[3].slice(1,-1):"",i=i.trim().replace(/^<([\s\S]*)>$/,"$1"),u+=this.outputLink(a,{href:r.escapes(i),title:r.escapes(o)}),this.inLink=!1}else if((a=this.rules.reflink.exec(e))||(a=this.rules.nolink.exec(e))){if(e=e.substring(a[0].length),t=(a[2]||a[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){u+=a[0].charAt(0),e=a[0].substring(1)+e;continue}this.inLink=!0,u+=this.outputLink(a,t),this.inLink=!1}else if(a=this.rules.strong.exec(e))e=e.substring(a[0].length),u+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(e))e=e.substring(a[0].length),u+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(e))e=e.substring(a[0].length),u+=this.renderer.codespan(c(a[2].trim(),!0));else if(a=this.rules.br.exec(e))e=e.substring(a[0].length),u+=this.renderer.br();else if(a=this.rules.del.exec(e))e=e.substring(a[0].length),u+=this.renderer.del(this.output(a[1]));else if(a=this.rules.autolink.exec(e))e=e.substring(a[0].length),"@"===a[2]?(n=c(this.mangle(a[1])),i="mailto:"+n):(n=c(a[1]),i=n),u+=this.renderer.link(i,null,n);else if(this.inLink||!(a=this.rules.url.exec(e))){if(a=this.rules.text.exec(e))e=e.substring(a[0].length),u+=this.inRawBlock?this.renderer.text(a[0]):this.renderer.text(c(this.smartypants(a[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===a[2])n=c(a[0]),i="mailto:"+n;else{do s=a[0],a[0]=this.rules._backpedal.exec(a[0])[0];while(s!==a[0]);n=c(a[0]),i="www."===a[1]?"http://"+n:n}e=e.substring(a[0].length),u+=this.renderer.link(i,null,n)}return u},r.escapes=function(e){return e?e.replace(r.rules._escapes,"$1"):e},r.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i<r;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'<pre><code class="'+this.options.langPrefix+c(r,!0)+'">'+(n?e:c(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:c(e,!0))+"</code></pre>"},i.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},i.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul",i=t&&1!==n?' start="'+n+'"':"";return"<"+r+i+">\n"+e+"</"+r+">\n"},i.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},i.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},i.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},i.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},i.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' align="'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},i.prototype.strong=function(e){return"<strong>"+e+"</strong>"},i.prototype.em=function(e){return"<em>"+e+"</em>"},i.prototype.codespan=function(e){return"<code>"+e+"</code>"},i.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},i.prototype.del=function(e){return"<del>"+e+"</del>"},i.prototype.link=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<a href="'+c(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},i.prototype.image=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},i.prototype.text=function(e){return e},o.prototype.strong=o.prototype.em=o.prototype.codespan=o.prototype.del=o.prototype.text=function(e){return e},o.prototype.link=o.prototype.image=function(e,t,n){return""+n},o.prototype.br=function(){return""},a.parse=function(e,t){var n=new a(t);return n.parse(e)},a.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.inlineText=new r(e.links,h({},this.options,{renderer:new o})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,u(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(i+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});o+=this.renderer.tablerow(n)}return this.renderer.table(i,o);case"blockquote_start":for(o="";"blockquote_end"!==this.next().type;)o+=this.tok();return this.renderer.blockquote(o);case"list_start":o="";for(var a=this.token.ordered,s=this.token.start;"list_end"!==this.next().type;)o+=this.tok();return this.renderer.list(o,a,s);case"list_item_start":o="";var c=this.token.loose;for(this.token.task&&(o+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)o+=c||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(o);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var l='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(l);console.log(l)}},s.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do this.seen[n]++,t=n+"-"+this.seen[n];while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},c.escapeTest=/[&<>"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var x={},k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;p.exec=p,b.options=b.setOptions=function(e){return h(b.defaults,e),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new i,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=a,b.parser=a.parse,b.Renderer=i,b.TextRenderer=o,b.Lexer=n,b.lexer=n.lex,b.InlineLexer=r,b.inlineLexer=r.output,b.Slugger=s,b.parse=b,e.exports=b}(this||("undefined"!=typeof window?window:t))}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(8),s=n(12),c=n(20),u=n(13),l=n(14),f=Object.assign({enabled:!1,type:"php-tar",packageName:"package",alwaysVisible:!1},l.download),d='<div id="download" class="tool">\n <img src="'+u.image("download")+'" alt="download"/>\n </div>',p=[],h=void 0,g=function(e){p=e.slice(0),p.length?h.show():f.alwaysVisible||h.hide()},m=function(){var e=f.type,t=f.packageName,n="shell-zip"===e?"zip":"tar";t||(t=1===p.length?p[0].label:c.getItem().label);var r={action:"download",as:t+"."+n,type:e,baseHref:c.getAbsHref(),hrefs:""};i(p,function(e,t){r["hrefs["+t+"]"]=e.absHref}),a.formRequest(r)},v=function(){f.enabled&&(h=o(d).hide().appTo("#toolbar").on("click",m),f.alwaysVisible&&h.show(),s.sub("selection",g))};v()},function(e,t,n){"use strict";var r=n(2),i=r.filter,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(12),u=n(20),l=n(13),f=n(14),d=n(18),p=Object.assign({enabled:!1,advanced:!1,debounceTime:100,ignorecase:!0},f.filter),h='<div id="filter" class="tool">\n <img src="'+l.image("filter")+'" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',g=!1,m="",v=void 0,b=void 0,w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==m){if(m=e,!e)return void d.setLocation();v.addCls("pending");var t=new RegExp(e,p.ignorecase?"i":""),n=i(u.getItem().content,function(e){return t.test(e.label)});v.rmCls("pending"),d.setHint("noMatch"),d.setItems(n)}},y=function(){g?(v.addCls("active"),b[0].focus(),w(a(b.val(),p.advanced))):(w(),v.rmCls("active"))},x=function(){g=!g,y()},k=function(){g=!1,b.val(""),y()},_=function(){p.enabled&&(v=s(h).appTo("#toolbar"),b=v.find("input"),v.find("img").on("click",x),b.on("keyup",o(y,p.debounceTime)),c.sub("location.changed",k))};_()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.map,i=n(12),o=n(14),a=e.window,s=Object.assign({enabled:!1,id:"UA-000000-0"},o["google-analytics-ua"]),c=function(){!function(e,t,n,r,i,o,a){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src=r,a.parentNode.insertBefore(o,a)}(window,document,"script","//www.google-analytics.com/analytics.js","ga")},u=function(){s.enabled&&(c(),a.ga("create",s.id,"auto"),i.sub("location.changed",function(e){var t=a.location;a.ga("send","pageview",{location:t.protocol+"//"+t.host+e.absHref,title:r(e.getCrumb(),function(e){return e.label}).join(" > ")})}))};u()}).call(t,function(){return this}())},function(e,t,n){(function(e){"use strict";var t=n(33),r=n(2),i=r.isNum,o=r.dom,a=n(12),s=n(19),c=n(13),u=n(14),l=n(16),f=Object.assign({enabled:!1,show:!1,qrcode:!0,qrColor:"#999"},u.info),d='<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',p='<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="'+c.image("info-toggle")+'" alt="view-info"/>\n </div>\n </div>',h="ext/info",g=void 0,m=void 0,v=void 0,b=void 0,w=void 0,y=void 0,x=void 0,k=void 0,_=void 0,C=function(){l.get(h)?(o("#view-info").addCls("active"),o("#info").show()):(o("#view-info").rmCls("active"),o("#info").hide())},S=function(n){var r=n.thumbRational||n.icon,o=!!n.thumbRational;if(!n.isCurrentFolder()&&r||(r=c.icon("folder")),g.attr("src",r),o?g.addCls("thumb"):g.rmCls("thumb"),m.text(n.label),i(n.time)?v.text(s.formatDate(n.time)):v.text("."),i(n.size)?(b.text(s.formatSize(n.size)),b.show()):b.hide(),n.isContentFetched){var a=n.getStats();y.text(a.folders),x.text(a.files),w.show()}else w.hide();if(f.qrcode){var u=e.window.location;k.clr().app(t({render:"image",size:200,fill:f.qrFill,back:f.qrBack,text:u.protocol+"//"+u.host+n.absHref,crisp:!0,quiet:1}))}},A=function(e){S(e)},T=function(){S(_)},E=function(e){_=e,S(_)},M=function(){if(f.enabled){var e=o(d).hide().appTo("#mainrow");g=e.find(".icon img"),m=e.find(".label"),v=e.find(".time"),b=e.find(".size"),w=e.find(".content"),y=e.find(".folders"),x=e.find(".files"),k=e.find(".qrcode"),f.qrcode||k.rm(),o(p).appTo("#sidebar").find("#view-info").on("click",function(e){l.put(h,!l.get(h)),C(),a.pub("resize"),e.preventDefault()}),"boolean"!=typeof l.get(h)&&l.put(h,f.show),C(),a.sub("location.changed",E),a.sub("item.mouseenter",A),a.sub("item.mouseleave",T)}};M()}).call(t,function(){return this}())},function(e,t,n){var r,i,o;!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=n(1),i=r.create_canvas,o=r.canvas_to_img,a=r.dpr,s=n(2),c=n(3),u=n(4);e.exports=function(e){var t=Object.assign({},s,e),n=c(t.text,t.ecLevel,t.minVersion,t.quiet),r=t.ratio||a,l=i(t.size,r),f=l.getContext("2d");return f.scale(r,r),u(n,f,t),"image"===t.render?o(l):l}},function(e,t){"use strict";var n=window,r=n.document,i=n.devicePixelRatio||1,o=function(e){return r.createElement(e)},a=function(e,t){return e.getAttribute(t)},s=function(e,t,n){return e.setAttribute(t,n)},c=function(e,t){var n=o("canvas");return s(n,"width",e*t),s(n,"height",e*t),n.style.width=e+"px",n.style.height=e+"px",n},u=function(e){var t=o("img");return s(t,"crossorigin","anonymous"),s(t,"src",e.toDataURL("image/png")),s(t,"width",a(e,"width")),s(t,"height",a(e,"height")),t.style.width=e.style.width,t.style.height=e.style.height,t};e.exports={create_canvas:c,canvas_to_img:u,dpr:i}},function(e,t){"use strict";e.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(n,a){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=/code length overflow/i,u=function(){var n=function(){function e(t,n){if("undefined"==typeof t.length)throw new Error(t.length+"/"+n);var r=function(){for(var e=0;e<t.length&&0==t[e];)e+=1;for(var r=new Array(t.length-e+n),i=0;i<t.length-e;i+=1)r[i]=t[i+e];return r}(),i={};return i.getAt=function(e){return r[e]},i.getLength=function(){return r.length},i.multiply=function(t){for(var n=new Array(i.getLength()+t.getLength()-1),r=0;r<i.getLength();r+=1)for(var o=0;o<t.getLength();o+=1)n[r+o]^=a.gexp(a.glog(i.getAt(r))+a.glog(t.getAt(o)));return e(n,0)},i.mod=function(t){if(i.getLength()-t.getLength()<0)return i;for(var n=a.glog(i.getAt(0))-a.glog(t.getAt(0)),r=new Array(i.getLength()),o=0;o<i.getLength();o+=1)r[o]=i.getAt(o);for(var o=0;o<t.getLength();o+=1)r[o]^=a.gexp(a.glog(t.getAt(o))+n);return e(r,0).mod(t)},i}var t=function(t,n){var i=236,a=17,l=t,f=r[n],d=null,p=0,g=null,m=new Array,v={},b=function(e,t){p=4*l+17,d=function(e){for(var t=new Array(e),n=0;n<e;n+=1){t[n]=new Array(e);for(var r=0;r<e;r+=1)t[n][r]=null}return t}(p),w(0,0),w(p-7,0),w(0,p-7),k(),x(),C(e,t),l>=7&&_(e),null==g&&(g=T(l,f,m)),S(g,t)},w=function(e,t){for(var n=-1;n<=7;n+=1)if(!(e+n<=-1||p<=e+n))for(var r=-1;r<=7;r+=1)t+r<=-1||p<=t+r||(0<=n&&n<=6&&(0==r||6==r)||0<=r&&r<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=r&&r<=4?d[e+n][t+r]=!0:d[e+n][t+r]=!1)},y=function(){for(var e=0,t=0,n=0;n<8;n+=1){b(!0,n);var r=o.getLostPoint(v);(0==n||e>r)&&(e=r,t=n)}return t},x=function(){for(var e=8;e<p-8;e+=1)null==d[e][6]&&(d[e][6]=e%2==0);for(var t=8;t<p-8;t+=1)null==d[6][t]&&(d[6][t]=t%2==0)},k=function(){for(var e=o.getPatternPosition(l),t=0;t<e.length;t+=1)for(var n=0;n<e.length;n+=1){var r=e[t],i=e[n];if(null==d[r][i])for(var a=-2;a<=2;a+=1)for(var s=-2;s<=2;s+=1)a==-2||2==a||s==-2||2==s||0==a&&0==s?d[r+a][i+s]=!0:d[r+a][i+s]=!1}},_=function(e){for(var t=o.getBCHTypeNumber(l),n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[Math.floor(n/3)][n%3+p-8-3]=r}for(var n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[n%3+p-8-3][Math.floor(n/3)]=r}},C=function(e,t){for(var n=f<<3|t,r=o.getBCHTypeInfo(n),i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<6?d[i][8]=a:i<8?d[i+1][8]=a:d[p-15+i][8]=a}for(var i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<8?d[8][p-i-1]=a:i<9?d[8][15-i-1+1]=a:d[8][15-i-1]=a}d[p-8][8]=!e},S=function(e,t){for(var n=-1,r=p-1,i=7,a=0,s=o.getMaskFunction(t),c=p-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var u=0;u<2;u+=1)if(null==d[r][c-u]){var l=!1;a<e.length&&(l=1==(e[a]>>>i&1));var f=s(r,c-u);f&&(l=!l),d[r][c-u]=l,i-=1,i==-1&&(a+=1,i=7)}if(r+=n,r<0||p<=r){r-=n,n=-n;break}}},A=function(t,n){for(var r=0,i=0,a=0,s=new Array(n.length),c=new Array(n.length),u=0;u<n.length;u+=1){var l=n[u].dataCount,f=n[u].totalCount-l;i=Math.max(i,l),a=Math.max(a,f),s[u]=new Array(l);for(var d=0;d<s[u].length;d+=1)s[u][d]=255&t.getBuffer()[d+r];r+=l;var p=o.getErrorCorrectPolynomial(f),h=e(s[u],p.getLength()-1),g=h.mod(p);c[u]=new Array(p.getLength()-1);for(var d=0;d<c[u].length;d+=1){var m=d+g.getLength()-c[u].length;c[u][d]=m>=0?g.getAt(m):0}}for(var v=0,d=0;d<n.length;d+=1)v+=n[d].totalCount;for(var b=new Array(v),w=0,d=0;d<i;d+=1)for(var u=0;u<n.length;u+=1)d<s[u].length&&(b[w]=s[u][d],w+=1);for(var d=0;d<a;d+=1)for(var u=0;u<n.length;u+=1)d<c[u].length&&(b[w]=c[u][d],w+=1);return b},T=function(e,t,n){for(var r=s.getRSBlocks(e,t),u=c(),l=0;l<n.length;l+=1){var f=n[l];u.put(f.getMode(),4),u.put(f.getLength(),o.getLengthInBits(f.getMode(),e)),f.write(u)}for(var d=0,l=0;l<r.length;l+=1)d+=r[l].dataCount;if(u.getLengthInBits()>8*d)throw new Error("code length overflow. ("+u.getLengthInBits()+">"+8*d+")");for(u.getLengthInBits()+4<=8*d&&u.put(0,4);u.getLengthInBits()%8!=0;)u.putBit(!1);for(;!(u.getLengthInBits()>=8*d)&&(u.put(i,8),!(u.getLengthInBits()>=8*d));)u.put(a,8);return A(u,r)};return v.addData=function(e){var t=u(e);m.push(t),g=null},v.isDark=function(e,t){if(e<0||p<=e||t<0||p<=t)throw new Error(e+","+t);return d[e][t]},v.getModuleCount=function(){return p},v.make=function(){b(!1,y())},v.createTableTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n="";n+='<table style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: "+t+"px;",n+='">',n+="<tbody>";for(var r=0;r<v.getModuleCount();r+=1){n+="<tr>";for(var i=0;i<v.getModuleCount();i+=1)n+='<td style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: 0px;",n+=" width: "+e+"px;",n+=" height: "+e+"px;",n+=" background-color: ",n+=v.isDark(r,i)?"#000000":"#ffffff",n+=";",n+='"/>';n+="</tr>"}return n+="</tbody>",n+="</table>"},v.createImgTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n=v.getModuleCount()*e+2*t,r=t,i=n-t;return h(n,n,function(t,n){if(r<=t&&t<i&&r<=n&&n<i){var o=Math.floor((t-r)/e),a=Math.floor((n-r)/e);
-return v.isDark(a,o)?0:1}return 1})},v};t.stringToBytes=function(e){for(var t=new Array,n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t.push(255&r)}return t},t.createStringToBytes=function(e,t){var n=function(){for(var n=d(e),r=function(){var e=n.read();if(e==-1)throw new Error;return e},i=0,o={};;){var a=n.read();if(a==-1)break;var s=r(),c=r(),u=r(),l=String.fromCharCode(a<<8|s),f=c<<8|u;o[l]=f,i+=1}if(i!=t)throw new Error(i+" != "+t);return o}(),r="?".charCodeAt(0);return function(e){for(var t=new Array,i=0;i<e.length;i+=1){var o=e.charCodeAt(i);if(o<128)t.push(o);else{var a=n[e.charAt(i)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(r)}}return t}};var n={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},r={L:1,M:0,Q:3,H:2},i={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},o=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,o=7973,s=21522,c={},u=function(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t};return c.getBCHTypeInfo=function(e){for(var t=e<<10;u(t)-u(r)>=0;)t^=r<<u(t)-u(r);return(e<<10|t)^s},c.getBCHTypeNumber=function(e){for(var t=e<<12;u(t)-u(o)>=0;)t^=o<<u(t)-u(o);return e<<12|t},c.getPatternPosition=function(e){return t[e-1]},c.getMaskFunction=function(e){switch(e){case i.PATTERN000:return function(e,t){return(e+t)%2==0};case i.PATTERN001:return function(e,t){return e%2==0};case i.PATTERN010:return function(e,t){return t%3==0};case i.PATTERN011:return function(e,t){return(e+t)%3==0};case i.PATTERN100:return function(e,t){return(Math.floor(e/2)+Math.floor(t/3))%2==0};case i.PATTERN101:return function(e,t){return e*t%2+e*t%3==0};case i.PATTERN110:return function(e,t){return(e*t%2+e*t%3)%2==0};case i.PATTERN111:return function(e,t){return(e*t%3+(e+t)%2)%2==0};default:throw new Error("bad maskPattern:"+e)}},c.getErrorCorrectPolynomial=function(t){for(var n=e([1],0),r=0;r<t;r+=1)n=n.multiply(e([1,a.gexp(r)],0));return n},c.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case n.MODE_NUMBER:return 10;case n.MODE_ALPHA_NUM:return 9;case n.MODE_8BIT_BYTE:return 8;case n.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case n.MODE_NUMBER:return 12;case n.MODE_ALPHA_NUM:return 11;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else{if(!(t<41))throw new Error("type:"+t);switch(e){case n.MODE_NUMBER:return 14;case n.MODE_ALPHA_NUM:return 13;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}}},c.getLostPoint=function(e){for(var t=e.getModuleCount(),n=0,r=0;r<t;r+=1)for(var i=0;i<t;i+=1){for(var o=0,a=e.isDark(r,i),s=-1;s<=1;s+=1)if(!(r+s<0||t<=r+s))for(var c=-1;c<=1;c+=1)i+c<0||t<=i+c||0==s&&0==c||a==e.isDark(r+s,i+c)&&(o+=1);o>5&&(n+=3+o-5)}for(var r=0;r<t-1;r+=1)for(var i=0;i<t-1;i+=1){var u=0;e.isDark(r,i)&&(u+=1),e.isDark(r+1,i)&&(u+=1),e.isDark(r,i+1)&&(u+=1),e.isDark(r+1,i+1)&&(u+=1),0!=u&&4!=u||(n+=3)}for(var r=0;r<t;r+=1)for(var i=0;i<t-6;i+=1)e.isDark(r,i)&&!e.isDark(r,i+1)&&e.isDark(r,i+2)&&e.isDark(r,i+3)&&e.isDark(r,i+4)&&!e.isDark(r,i+5)&&e.isDark(r,i+6)&&(n+=40);for(var i=0;i<t;i+=1)for(var r=0;r<t-6;r+=1)e.isDark(r,i)&&!e.isDark(r+1,i)&&e.isDark(r+2,i)&&e.isDark(r+3,i)&&e.isDark(r+4,i)&&!e.isDark(r+5,i)&&e.isDark(r+6,i)&&(n+=40);for(var l=0,i=0;i<t;i+=1)for(var r=0;r<t;r+=1)e.isDark(r,i)&&(l+=1);var f=Math.abs(100*l/t/t-50)/5;return n+=10*f},c}(),a=function(){for(var e=new Array(256),t=new Array(256),n=0;n<8;n+=1)e[n]=1<<n;for(var n=8;n<256;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(var n=0;n<255;n+=1)t[e[n]]=n;var r={};return r.glog=function(e){if(e<1)throw new Error("glog("+e+")");return t[e]},r.gexp=function(t){for(;t<0;)t+=255;for(;t>=256;)t-=255;return e[t]},r}(),s=function(){var e=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(e,t){var n={};return n.totalCount=e,n.dataCount=t,n},n={},i=function(t,n){switch(n){case r.L:return e[4*(t-1)+0];case r.M:return e[4*(t-1)+1];case r.Q:return e[4*(t-1)+2];case r.H:return e[4*(t-1)+3];default:return}};return n.getRSBlocks=function(e,n){var r=i(e,n);if("undefined"==typeof r)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+n);for(var o=r.length/3,a=new Array,s=0;s<o;s+=1)for(var c=r[3*s+0],u=r[3*s+1],l=r[3*s+2],f=0;f<c;f+=1)a.push(t(u,l));return a},n}(),c=function(){var e=new Array,t=0,n={};return n.getBuffer=function(){return e},n.getAt=function(t){var n=Math.floor(t/8);return 1==(e[n]>>>7-t%8&1)},n.put=function(e,t){for(var r=0;r<t;r+=1)n.putBit(1==(e>>>t-r-1&1))},n.getLengthInBits=function(){return t},n.putBit=function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1},n},u=function(e){var r=n.MODE_8BIT_BYTE,i=t.stringToBytes(e),o={};return o.getMode=function(){return r},o.getLength=function(e){return i.length},o.write=function(e){for(var t=0;t<i.length;t+=1)e.put(i[t],8)},o},l=function(){var e=new Array,t={};return t.writeByte=function(t){e.push(255&t)},t.writeShort=function(e){t.writeByte(e),t.writeByte(e>>>8)},t.writeBytes=function(e,n,r){n=n||0,r=r||e.length;for(var i=0;i<r;i+=1)t.writeByte(e[i+n])},t.writeString=function(e){for(var n=0;n<e.length;n+=1)t.writeByte(e.charCodeAt(n))},t.toByteArray=function(){return e},t.toString=function(){var t="";t+="[";for(var n=0;n<e.length;n+=1)n>0&&(t+=","),t+=e[n];return t+="]"},t},f=function(){var e=0,t=0,n=0,r="",i={},o=function(e){r+=String.fromCharCode(a(63&e))},a=function(e){if(e<0);else{if(e<26)return 65+e;if(e<52)return 97+(e-26);if(e<62)return 48+(e-52);if(62==e)return 43;if(63==e)return 47}throw new Error("n:"+e)};return i.writeByte=function(r){for(e=e<<8|255&r,t+=8,n+=1;t>=6;)o(e>>>t-6),t-=6},i.flush=function(){if(t>0&&(o(e<<6-t),e=0,t=0),n%3!=0)for(var i=3-n%3,a=0;a<i;a+=1)r+="="},i.toString=function(){return r},i},d=function(e){var t=e,n=0,r=0,i=0,o={};o.read=function(){for(;i<8;){if(n>=t.length){if(0==i)return-1;throw new Error("unexpected end of file./"+i)}var e=t.charAt(n);if(n+=1,"="==e)return i=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),i+=6)}var o=r>>>i-8&255;return i-=8,o};var a=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw new Error("c:"+e)};return o},p=function(e,t){var n=e,r=t,i=new Array(e*t),o={};o.setPixel=function(e,t,r){i[t*n+e]=r},o.write=function(e){e.writeString("GIF87a"),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);var t=2,i=s(t);e.writeByte(t);for(var o=0;i.length-o>255;)e.writeByte(255),e.writeBytes(i,o,255),o+=255;e.writeByte(i.length-o),e.writeBytes(i,o,i.length-o),e.writeByte(0),e.writeString(";")};var a=function(e){var t=e,n=0,r=0,i={};return i.write=function(e,i){if(e>>>i!=0)throw new Error("length over");for(;n+i>=8;)t.writeByte(255&(e<<n|r)),i-=8-n,e>>>=8-n,r=0,n=0;r|=e<<n,n+=i},i.flush=function(){n>0&&t.writeByte(r)},i},s=function(e){for(var t=1<<e,n=(1<<e)+1,r=e+1,o=c(),s=0;s<t;s+=1)o.add(String.fromCharCode(s));o.add(String.fromCharCode(t)),o.add(String.fromCharCode(n));var u=l(),f=a(u);f.write(t,r);var d=0,p=String.fromCharCode(i[d]);for(d+=1;d<i.length;){var h=String.fromCharCode(i[d]);d+=1,o.contains(p+h)?p+=h:(f.write(o.indexOf(p),r),o.size()<4095&&(o.size()==1<<r&&(r+=1),o.add(p+h)),p=h)}return f.write(o.indexOf(p),r),f.write(n,r),f.flush(),u.toByteArray()},c=function(){var e={},t=0,n={};return n.add=function(r){if(n.contains(r))throw new Error("dup key:"+r);e[r]=t,t+=1},n.size=function(){return t},n.indexOf=function(t){return e[t]},n.contains=function(t){return"undefined"!=typeof e[t]},n};return o},h=function(e,t,n,r){for(var i=p(e,t),o=0;o<t;o+=1)for(var a=0;a<e;a+=1)i.setPixel(a,o,n(a,o));var s=l();i.write(s);for(var c=f(),u=s.toByteArray(),d=0;d<u.length;d+=1)c.writeByte(u[d]);c.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=c,h+='"',h+=' width="',h+=e,h+='"',h+=' height="',h+=t,h+='"',r&&(h+=' alt="',h+=r,h+='"'),h+="/>"};return t}();return function(n){i=[],r=n,o="function"==typeof r?r.apply(t,i):r,!(void 0!==o&&(e.exports=o))}(function(){return n}),!function(e){e.stringToBytes=function(e){function t(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);r<128?t.push(r):r<2048?t.push(192|r>>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}return t(e)}}(n),n}(),l=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;n=Math.max(1,n);for(var r=n;r<=40;r+=1)try{var i=function(){var n=u(r,t);n.addData(e),n.make();var i=n.getModuleCount(),o=function(e,t){return e>=0&&e<i&&t>=0&&t<i&&n.isDark(e,t)};return{v:{text:e,level:t,version:r,moduleCount:i,isDark:o}}}();if("object"===("undefined"==typeof i?"undefined":s(i)))return i.v}catch(e){if(!(r<40&&c.test(e.message)))throw e}return null},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"L",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=l(e,t,n);if(i){var o=i.isDark;i.moduleCount+=2*r,i.isDark=function(e,t){return o(e-r,t-r)}}return i};n.exports=f},function(e,t,n){"use strict";var r=n(5),i=n(6),o=function(e,t){e.fillStyle=t.back,e.fillRect(0,0,t.size,t.size)},a=function(e,t,n,r,i,o){e.isDark(i,o)&&t.rect(o*r,i*r,r,r)},s=function(e,t,n){if(e){var i=n.rounded>0&&n.rounded<=100?r:a,o=e.moduleCount,s=n.size/o,c=0;n.crisp&&(s=Math.floor(s),c=Math.floor((n.size-s*o)/2)),t.translate(c,c),t.beginPath();for(var u=0;u<o;u+=1)for(var l=0;l<o;l+=1)i(e,t,n,s,u,l);t.fillStyle=n.fill,t.fill(),t.translate(-c,-c)}},c=function(e,t,n){o(t,n),s(e,t,n),i(t,n)};e.exports=c},function(e,t){"use strict";var n=function(e){return{c:e,m:function(){var e;return(e=this.c).moveTo.apply(e,arguments),this},l:function(){var e;return(e=this.c).lineTo.apply(e,arguments),this},a:function(){var e;return(e=this.c).arcTo.apply(e,arguments),this}}},r=function(e,t,n,r,i,o,a,s,c,u){a?e.m(t+o,n):e.m(t,n),s?e.l(r-o,n).a(r,n,r,i,o):e.l(r,n),c?e.l(r,i-o).a(r,i,t,i,o):e.l(r,i),u?e.l(t+o,i).a(t,i,t,n,o):e.l(t,i),a?e.l(t,n+o).a(t,n,r,n,o):e.l(t,n)},i=function(e,t,n,r,i,o,a,s,c,u){a&&e.m(t+o,n).l(t,n).l(t,n+o).a(t,n,t+o,n,o),s&&e.m(r-o,n).l(r,n).l(r,n+o).a(r,n,r-o,n,o),c&&e.m(r-o,i).l(r,i).l(r,i-o).a(r,i,r-o,i,o),u&&e.m(t+o,i).l(t,i).l(t,i-o).a(t,i,t+o,i,o)},o=function(e,t,o,a,s,c){var u=c*a,l=s*a,f=u+a,d=l+a,p=.005*o.rounded*a,h=e.isDark,g=s-1,m=s+1,v=c-1,b=c+1,w=h(s,c),y=h(g,v),x=h(g,c),k=h(g,b),_=h(s,b),C=h(m,b),S=h(m,c),A=h(m,v),T=h(s,v);t=n(t),w?r(t,u,l,f,d,p,!x&&!T,!x&&!_,!S&&!_,!S&&!T):i(t,u,l,f,d,p,x&&T&&y,x&&_&&k,S&&_&&C,S&&T&&A)};e.exports=o},function(e,t){"use strict";var n=function(e,t){var n=t.size,r="bold "+.01*t.mSize*n+"px "+t.fontname;e.strokeStyle=t.back,e.lineWidth=.01*t.mSize*n*.1,e.fillStyle=t.fontcolor,e.font=r;var i=e.measureText(t.label).width,o=.01*t.mSize,a=i/n,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n+.75*t.mSize*.01*n;e.strokeText(t.label,u,l),e.fillText(t.label,u,l)},r=function(e,t){var n=t.size,r=t.image.naturalWidth||1,i=t.image.naturalHeight||1,o=.01*t.mSize,a=o*r/i,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n,f=a*n,d=o*n;e.draw_image(t.image,u,l,f,d)},i=function(e,t){var i=t.mode;"label"===i?n(e,t):"image"===i&&r(e,t)};e.exports=i}])})},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.isStr,o=t.dom,a=n(8),s=n(12),c=n(19),u=n(35),l=n(14),f=n(16),d=e.window,p=Object.assign({enabled:!1,lang:"en",useBrowserLang:!0},l.l10n),h={isoCode:"en",lang:"english",dateFormat:"YYYY-MM-DD HH:mm",details:"details",download:"download",empty:"empty",files:"files",filter:"filter",folders:"folders",grid:"grid",icons:"icons",language:"Language",lastModified:"Last modified",name:"Name",noMatch:"no match",parentDirectory:"Parent Directory",search:"search",size:"Size",tree:"Tree",view:"View"},g='<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',m="<option/>",v="ext/l10n",b={en:Object.assign({},h)},w=b.en,y=function(e){e&&(w=e);var t="selected";o("#langs option").rmAttr(t).rmProp(t),o("#langs ."+w.isoCode).attr(t,"").prop(t,!0),r(w,function(e,t){o(".l10n-"+t).text(e),o(".l10n_ph-"+t).attr("placeholder",e)}),c.setDefaultDateFormat(w.dateFormat),o("#items .item").each(function(e){o(e).find(".date").text(c.formatDate(e._item.time))})},x=function(e){return b[e]?Promise.resolve(b[e]):a.request({action:"get",l10n:[e]}).then(function(t){return b[e]=Object.assign({},h,t.l10n&&t.l10n[e],{isoCode:e}),b[e]})},k=function(e,t,n){var r=f.get(v);if(e[r])t=r;else if(n){var i=d.navigator.language||d.navigator.browserLanguage;i&&(e[i]?t=i:i.length>2&&e[i.substr(0,2)]&&(t=i.substr(0,2)))}e[t]||(t="en"),x(t).then(y)},_=function(e){var t=o(g),n=t.find("select").on("change",function(t){var n=t.target.value;f.put(v,n),k(e,n,!1)});r(e,function(e,t){o(m).attr("value",t).addCls(t).text(t+" - "+(i(e)?e:e.lang)).appTo(n)}),t.appTo("#sidebar")},C=function(){p.enabled&&_(u),s.sub("view.changed",function(){k(u,p.lang,p.useBrowserLang)})};C()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(7),i=r.langs;e.exports=Object.assign({},i)},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=t.awaitLoad,o=n(12),a=n(14),s=e.window,c=Object.assign({enabled:!1,baseURL:"not-set",idSite:0},a["piwik-analytics"]),u=function(){if(c.enabled){var e=("https:"===s.location.protocol?"https://":"http://")+c.baseURL+"/",t=[],n=null;r("<script></script>").attr("src",e+"piwik.js").appTo("body"),i().then(function(){if(n=s.Piwik&&s.Piwik.getTracker(e+"piwik.php",c.idSite))for(n.enableLinkTracking();t.length;)n.trackPageView(t.shift())}),o.sub("location.changed",function(e){var r=e.getCrumb().map(function(e){return e.label}).join(" > ");n?n.trackPageView(r):t.push(r)})}};u()}).call(t,function(){return this}())},function(e,t,n){"use strict";n(38),n(39),n(40),n(41),n(43)},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.isFn,a=r.dom,s=r.includes,c=r.compact,u=n(12),l=n(13),f=n(14),d=n(16),p=t.window,h=Object.assign({enabled:!0},f.preview),g='<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="'+l.image("spinner")+'"/></div>\n <div id="pv-prev-area" class="hof"><img src="'+l.image("preview-prev")+'"/></div>\n <div id="pv-next-area" class="hof"><img src="'+l.image("preview-next")+'"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="'+l.image("preview-close")+'"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="'+l.image("preview-raw")+'"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="'+l.image("preview-fullscreen")+'"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="'+l.image("preview-next")+'"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="'+l.image("preview-prev")+'"/></li>\n </ul>\n </div>\n </div>',m="ext/preview",v=d.get(m)||!1,b=null,w=!1,y=null,x=null,k=function(){var e=a("#pv-container"),t=e[0],n=e.children()[0];if(t&&n){var r=t.offsetWidth,i=t.offsetHeight,o=n.offsetWidth,s=n.offsetHeight;a(n).css({left:.5*(r-o)+"px",top:.5*(i-s)+"px"})}},_=function(){var e=p.document.documentElement,t=e.clientWidth,n=e.clientHeight,r=v?0:20,i=v?0:48;a("#pv-container").css({width:t-2*r+"px",height:n-2*r-i+"px",left:r+"px",top:r+"px"}),a("#pv-spinner").css({left:.5*t+"px",top:.5*n+"px"}),v?(a("#pv-overlay").addCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-no-fullscreen"))):(a("#pv-overlay").rmCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-fullscreen"))),k(),o(x&&x.adjust)&&x.adjust()},C=function(e,t){a("#pv-bar-idx").text(e+"/"+t).show()},S=function(e){a("#pv-bar-raw").show().find("a").attr("href",e)},A=function(e){a("#pv-buttons .bar-left").rm(),i(e,function(e){a("<li></li>").addCls("bar-left").addCls("bar-label").text(e).appTo("#pv-buttons")})},T=function(){var e=a("#pv-overlay .hof");p.clearTimeout(b),e.show(),v&&(b=p.setTimeout(function(){return e.hide()},2e3))},E=function(){return x&&x.moveIdx(1)},M=function(){return x&&x.moveIdx(-1)},D=function(){v=!v,d.put(m,v),T(),_()},P=function(e){e.stopPropagation(),e.preventDefault()},z=function(e){var t=e.keyCode;27===t?(P(e),$()):8===t||37===t?(P(e),M()):13===t||32===t||39===t?(P(e),E()):70===t&&(P(e),D())},L=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").show(),a(p).on("keydown",z),_()},$=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").hide(),a(p).off("keydown",z)},H=function e(t,n,r){p.clearTimeout(y);var i=a("#pv-spinner");if(!t)return w=!1,void i.hide();if(!w&&r)return void(y=p.setTimeout(function(){return e(!0,n)},r));var o=i.find(".back");n?o.attr("src",n).show():o.hide(),w=!0,i.show()},O=function e(t,n,r,i){var o=Object.assign(Object.create(e.prototype),{items:t,load:r,adjust:i});return o.setIdx(n),o};O.prototype={setIdx:function(e){var t=this;this.idx=(e+this.items.length)%this.items.length,this.item=this.items[this.idx],C(this.idx+1,this.items.length),S(this.item.absHref),A([this.item.label]);var n=this.item;Promise.resolve().then(function(){i(a("#pv-container *"),function(e){"function"==typeof e.unload&&e.unload()}),a("#pv-container").hide().clr(),H(!0,n.thumbSquare||n.icon,200)}).then(function(){return t.load(n)}).then(function(e){n===t.item&&(a("#pv-container").clr().app(e).show(),H(!1),_())})},moveIdx:function(e){this.setIdx(this.idx+e)}};var B=function(e,t,n){var r=function(r){r.$view&&s(e,r.type)&&r.$view.find("a").on("click",function(i){i.preventDefault();var o=c(a("#items .item").map(function(t){var n=t._item;return s(e,n.type)?n:null}));x=O(o,o.indexOf(r),t,n),L()})};u.sub("view.changed",function(e){return i(e,r)})},R=function(){h.enabled&&(a(g).hide().appTo("body").on("keydown",z).on("mousemove",T).on("mousedown",T).on("click",function(e){"pv-overlay"!==e.target.id&&"pv-container"!==e.target.id||$()}).on("mousedown",P).on("mousemove",P).on("keydown",P).on("keypress",P),a("#pv-spinner").hide(),a("#pv-bar-prev, #pv-prev-area").on("click",M),a("#pv-bar-next, #pv-next-area").on("click",E),a("#pv-bar-close").on("click",$),a("#pv-bar-fullscreen").on("click",D),a(p).on("resize",_).on("load",_))};e.exports={setLabels:A,register:B,get item(){return x&&x.item}},R()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(19),a=n(14),s=n(38),c=Object.assign({enabled:!1,autoplay:!0,types:[]},a["preview-aud"]),u='<audio id="pv-content-aud"/>',l=function(){var e=i("#pv-content-aud")[0];e&&s.setLabels([s.item.label,o.formatDate(1e3*e.duration,"m:ss")])},f=function(e){e.unload=function(){e.src="",e.load()}},d=function(e){return new Promise(function(t){var n=i(u).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");c.autoplay&&n.attr("autoplay","autoplay"),f(n[0]),n.attr("src",e.absHref)})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(8),a=n(14),s=n(38),c=Object.assign({enabled:!1,size:null,types:[]},a["preview-img"]),u='<img id="pv-content-img"/>',l=function(){var e=i("#pv-content-img")[0];if(e){var t=e.offsetWidth,n=[s.item.label];if(!c.size){var r=e.naturalWidth,o=e.naturalHeight;n.push(String(r)+"x"+String(o)),n.push(String((100*t/r).toFixed(0))+"%")}s.setLabels(n)}},f=function(e){return o.request({action:"get",thumbs:[{type:"img",href:e,width:c.size,height:0}]}).then(function(e){return e&&e.thumbs&&e.thumbs[0]?e.thumbs[0]:null})},d=function(e){return Promise.resolve(e.absHref).then(function(e){return c.size?f(e):e}).then(function(e){return new Promise(function(t){var n=i(u).on("load",function(){return t(n)}).attr("src",e)})})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){(function(e){"use strict";var t=n(42),r=n(28),i=n(2),o=i.keys,a=i.dom,s=n(14),c=n(38),u=e.window,l=u.XMLHttpRequest,f=Object.assign({enabled:!1,styles:{}},s["preview-txt"]),d='<pre id="pv-content-txt"></pre>',p='<div id="pv-content-txt"></div>',h=function(){var e=a("#pv-content-txt")[0];if(e){var t=a("#pv-container")[0];e.style.height=t.offsetHeight+"px",c.setLabels([c.item.label,c.item.size+" bytes"])}},g=function(e){return new Promise(function(t,n){var r=new l,i=function(){if(r.readyState===l.DONE)try{t(r.responseText||"")}catch(e){n(String(e))}};r.open("GET",e,!0),r.onreadystatechange=i,r.send()})},m=function(e){return g(e.absHref).catch(function(e){return"[request failed] "+e}).then(function(n){var i=f.styles[e.type];if(1===i)return a(d).text(n);if(2===i)return a(p).html(r(n));if(3===i){var o=a("<code></code>").text(n);return u.setTimeout(function(){t.el(o[0])},n.length<2e4?0:500),a(d).app(o)}return a(p).text(n)})},v=function(){f.enabled&&c.register(o(f.styles),m,h)};v()}).call(t,function(){return this}())},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){var e=".lolight",t="ll-",n="_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}".replace(/_/g,"."+t).replace(/#/g,"{color:#"),r=/^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,i="com",o="key",a="nam",s="num",c="pct",u="rex",l="spc",f="str",d="unk",p=[[s,/#([0-9a-f]{6}|[0-9a-f]{3})\b/],[i,/(\/\/|#).*?(?=\n|$)/],[i,/\/\*[\s\S]*?\*\//],[i,/<!--[\s\S]*?-->/],[u,/\/(\\\/|[^\n])*?\//],[f,/(['"`])(\\\1|[\s\S])*?\1/],[s,/[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?/],[c,/[\\.,:;+\-*\/=<>()[\]{}|?!&(a)~]/],[l,/\s+/],[a,/[\w$]+/],[d,/./]],h=function(e){if("string"!=typeof e)throw new Error("tok: no string");for(var t=[],n=p.length,i=!1;e;)for(var c=0;c<n;c+=1){var f=p[c][1].exec(e);if(f&&0===f.index){var d=p[c][0];if(d!==u||!i){var h=f[0];d===a&&r.test(h)&&(d=o),d===l?h.indexOf("\n")>=0&&(i=!1):i=d===s||d===a,e=e.slice(h.length),t.push([d,h]);break}}}return t},g=function(e,t){if("undefined"!=typeof document)t(document);else if(e)throw new Error("no doc")},m=function(e){g(!0,function(n){var r=h(e.textContent);e.innerHTML="",r.forEach(function(r){var i=n.createElement("span");i.className=t+r[0],i.textContent=r[1],e.appendChild(i)})})},v=function(t){g(!0,function(n){[].forEach.call(n.querySelectorAll(t||e),function(e){m(e)})})};return g(!1,function(e){var t=e.querySelector("head"),r=e.createElement("style");r.textContent=n,t.insertBefore(r,t.firstChild),/^(i|c|loade)/.test(e.readyState)?v():e.addEventListener("DOMContentLoaded",function(){v()})}),v.tok=h,v.el=m,v})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(14),a=n(38),s=Object.assign({enabled:!1,autoplay:!0,types:[]},o["preview-vid"]),c='<video id="pv-content-vid"/>',u=function(){var e=i("#pv-content-vid")[0];if(e){var t=e.offsetWidth,n=e.videoWidth,r=e.videoHeight;a.setLabels([a.item.label,String(n)+"x"+String(r),String((100*t/n).toFixed(0))+"%"])}},l=function(e){e.unload=function(){e.src="",e.load()}},f=function(e){return new Promise(function(t){var n=i(c).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");s.autoplay&&n.attr("autoplay","autoplay"),l(n[0]),n.attr("src",e.absHref)})},d=function(){s.enabled&&a.register(s.types,f,u)};d()},function(e,t,n){"use strict";var r=n(2),i=r.map,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(8),u=n(12),l=n(20),f=n(13),d=n(14),p=n(22),h=n(18),g=Object.assign({enabled:!1,advanced:!1,debounceTime:300,ignorecase:!0},d.search),m='<div id="search" class="tool">\n <img src="'+f.image("search")+'" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',v=!1,b="",w=void 0,y=void 0,x=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==b){if(b=e,!e)return void h.setLocation();w.addCls("pending"),c.request({action:"get",search:{href:l.getAbsHref(),pattern:e,ignorecase:g.ignorecase}}).then(function(e){w.rmCls("pending"),h.setHint("noMatch"),h.setItems(i(e.search,function(e){return p.get(e)}))})}},k=function(){v?(w.addCls("active"),y[0].focus(),x(a(y.val(),g.advanced))):(x(),w.rmCls("active"))},_=function(){v=!v,k()},C=function(){v=!1,y.val(""),k()},S=function(){g.enabled&&(w=s(m).appTo("#toolbar"),y=w.find("input"),w.find("img").on("click",_),y.on("keyup",o(k,g.debounceTime)),u.sub("location.changed",C))};S()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.dom,o=n(12),a=n(13),s=n(14),c=e.window.document,u=Object.assign({enabled:!1,clickndrag:!1,checkboxes:!1},s.select),l='<span class="selector">\n <img src="'+a.image("selected")+'" alt="selected"/>\n </span>',f=i(c),d=i("html"),p=i('<div id="selection-rect"></div>'),h=Math.max,g=Math.min,m=Math.abs,v=0,b=0,w=function(){var e=i("#items .item.selected").map(function(e){return e._item});o.pub("selection",e)},y=function(e){var t=i(e);if(!t.length||t.isHidden())return null;var n=t[0].getBoundingClientRect();return{l:n.left,t:n.top,r:n.right,b:n.bottom}},x=function(e,t){return!!e&&!!t&&e.l===t.l&&e.t===t.t&&e.r===t.r&&e.b===t.b},k=function(e){var t=e[0];x(y(t),t&&t._rect)||e.each(function(e){e._rect=y(e)})},_=function(e,t){if(!e||!t)return!1;var n=h(e.l,t.l),r=g(e.r,t.r),i=h(e.t,t.t),o=g(e.b,t.b);return n<=r&&i<=o},C=function(e){var t=i("#content")[0],n=y(t),r=e.pageX-n.l+t.scrollLeft,o=e.pageY-n.t+t.scrollTop;return{x:r,y:o}},S=function(e){var t=C(e),n=t.x,r=t.y,o=g(v,n),a=g(b,r),s=m(v-n),c=m(b-r),u=e.ctrlKey||e.metaKey;if(!(!u&&s<4&&c<4)){u||i("#items .item").rmCls("selected"),d.addCls("drag-select"),p.show().css({left:o+"px",top:a+"px",width:s+"px",height:c+"px"});var l=y(p),f=i("#items .item:not(.folder-parent)");k(f),f.rmCls("selecting").each(function(e){_(l,e._rect)&&i(e).addCls("selecting")})}},A=function e(t){f.off("mousemove",S).off("mouseup",e),S(t),i("#items .item.selecting.selected").rmCls("selecting").rmCls("selected"),i("#items .item.selecting").rmCls("selecting").addCls("selected"),w(),d.rmCls("drag-select"),p.hide(),t.stopPropagation(),t.preventDefault()},T=function(e){if(!(0!==e.button||e.offsetX>=i("#content")[0].offsetWidth-16)){var t=C(e),n=t.x,r=t.y;v=n,b=r,f.on("mousemove",S).on("mouseup",A),S(e),e.preventDefault()}},E=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},M=function(e){E(e.target).$view.tglCls("selected"),w(),e.stopPropagation(),e.preventDefault()},D=function(e){e.$view&&!e.isCurrentParentFolder()&&i(l).on("click",M).appTo(e.$view.find("a"))},P=function(e,t){u.checkboxes&&r(e,D),r(t,function(e){e.$view&&e.$view.rmCls("selected")}),w()},z=function(){u.enabled&&(u.clickndrag||u.checkboxes)&&(o.sub("view.changed",P),u.clickndrag&&(p.hide().appTo("#content"),i("#content").on("mousedown",T).on("drag",function(e){return e.preventDefault()}).on("dragstart",function(e){return e.preventDefault()})))};z()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.toArray,a=r.dom,s=r.cmp,c=r.naturalCmp,u=n(12),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,column:0,reverse:!1,ignorecase:!0,natural:!1,folders:0},f.sort),h="ext/sort",g='<img src="'+l.image("sort")+'" class="sort" alt="sort order"/>',m=function(e){
-return e.isFolder()?p.folders:1},v={0:"label",1:"time",2:"size"},b={0:"label",1:"date",2:"size"},w=function(e,t,n,r){return function(i,o){var a=i._item,u=o._item,l=m(a)-m(u);if(0!==l)return l;var f=a[e],d=u[e];return(isNaN(f)||isNaN(d))&&(f=String(f),d=String(d),n&&(f=f.toLowerCase(),d=d.toLowerCase())),l=r?c(f,d):s(f,d),t?-l:l}},y=function(e,t){var n=a("#items li.header a"),r=a("#items li.header a."+b[e]),i=w(v[e],t,p.ignorecase,p.natural);d.put(h,{column:e,reverse:t}),n.rmCls("ascending").rmCls("descending"),r.addCls(t?"descending":"ascending"),a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items")},x=function(){var e=d.get(h),t=e&&e.column||p.column,n=e&&e.reverse||p.reverse;y(t,n)},k=function(){var e=a("#items li.header");i(b,function(t,n){var r="0"===n?"app":"pre";e.find("a."+t)[r](g).on("click",function(e){y(n,a(e.currentTarget).hasCls("ascending")),e.preventDefault()})})},_=function(){p.enabled&&(k(),u.sub("view.changed",x))};_()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1,img:["img-bmp","img-gif","img-ico","img-jpg","img-png"],mov:["vid-avi","vid-flv","vid-mkv","vid-mov","vid-mp4","vid-mpg","vid-webm"],doc:["x-pdf","x-ps"],delay:1,size:100,exif:!1,chunksize:20},u.thumbnails),f=4/3,d=function(e,t){var n=null;if(a(l.img,t.type))n="img";else if(a(l.mov,t.type))n="mov";else{if(!a(l.doc,t.type))return;n="doc"}t.thumbSquare?t.$view.find(".icon.square img").addCls("thumb").attr("src",t.thumbSquare):e.push({type:n,href:t.absHref,ratio:1,callback:function(e){e&&t.$view&&(t.thumbSquare=e,t.$view.find(".icon.square img").addCls("thumb").attr("src",e))}}),t.thumbRational?t.$view.find(".icon.landscape img").addCls("thumb").attr("src",t.thumbRational):e.push({type:n,href:t.absHref,ratio:f,callback:function(e){e&&t.$view&&(t.thumbRational=e,t.$view.find(".icon.landscape img").addCls("thumb").attr("src",e))}})},p=function(e){var t=o(e,function(e){return{type:e.type,href:e.href,width:Math.round(l.size*e.ratio),height:l.size}});return s.request({action:"get",thumbs:t}).then(function(t){i(e,function(e,n){e.callback(t&&t.thumbs?t.thumbs[n]:null)})})},h=function(e){for(var t=e.length,n=l.chunksize,r=Promise.resolve(),i=function(t){r=r.then(function(){return p(e.slice(t,t+n))})},o=0;o<t;o+=n)i(o)},g=function(e){var t=[];i(e,function(e){return d(t,e)}),h(t)},m=function(e){setTimeout(function(){return g(e)},l.delay)},v=function(){l.enabled&&c.sub("view.changed",m)};v()},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(14),i=e.window.document,o=Object.assign({enabled:!1},r.title),a=function(e){var t=e.getCrumb().map(function(e){return e.label}),n=t.join(" > ");t.length>1&&(n=t[t.length-1]+" - "+n),i.title=n},s=function(){o.enabled&&t.sub("location.changed",a)};s()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=r.cmp,s=r.naturalCmp,c=n(12),u=n(20),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,show:!0,maxSubfolders:50,naturalSort:!1,ignorecase:!0},f.tree),h='<div class="item folder">\n <span class="indicator">\n <img src="'+l.image("tree-indicator")+'"/>\n </span>\n <a>\n <span class="icon"><img src="'+l.icon("folder")+'"/></span>\n <span class="label"></span>\n </a>\n </span>',g='<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="'+l.image("tree-toggle")+'" alt="view-tree"/>\n </div>\n </div>',m="ext/tree",v=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},b=function(e){var t=v(e.target);"unknown"===t._treeState?t.fetchContent().then(function(){t._treeState="open",y(t)}):"open"===t._treeState?(t._treeState="closed",t._$tree.rmCls("open").addCls("closed")):"closed"===t._treeState&&(t._treeState="open",t._$tree.rmCls("closed").addCls("open"))},w=function(e,t){var n=e.label,r=t.label;return p.ignorecase&&(n=n.toLowerCase(),r=r.toLowerCase()),p.naturalSort?s(n,r):a(n,r)},y=function e(t){var n=t.getSubfolders(),r=n.length,a=p.maxSubfolders,s=o(h);if(s.find(".indicator").on("click",b),s.find(".label").text(t.label),u.setLink(s.find("a"),t),t.isCurrentFolder()&&s.addCls("active"),t.isManaged||s.find(".icon img").attr("src",l.icon("folder-page")),t._treeState=t._treeState||"none",t.isManaged&&!t.isContentFetched?t._treeState="unknown":r||(t._treeState="none"),s.addCls(t._treeState),r){var c=o('<div class="content"></div>').appTo(s);n.sort(w),i(n.slice(0,a),function(t){return c.app(e(t))}),r>a&&c.app('<div class="summary">… '+(r-a)+" more subfolders</div>")}return t._$tree&&t._$tree.rpl(s),t._$tree=s,s[0]._item=t,s},x=function e(t){return t._treeState="open",t.fetchContent().then(function(){return t.parent?e(t.parent):t})},k=function(){d.get(m)?(o("#view-tree").addCls("active"),o("#tree").show()):(o("#view-tree").rmCls("active"),o("#tree").hide())},_=function(e){x(e).then(function(e){o("#tree").clr().app(y(e)),k()})},C=function(){p.enabled&&(o('<div id="tree"></div>').hide().appTo("#mainrow"),o(g).appTo("#sidebar").find("#view-tree").on("click",function(e){d.put(m,!d.get(m)),k(),c.pub("resize"),e.preventDefault()}),"boolean"!=typeof d.get(m)&&d.put(m,p.show),k(),c.sub("location.changed",_))};C()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=n(7),o=n(8),a=n(13),s='<ul id="tests"></ul>',c='<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',u='<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in \'_h5ai/private/conf/options.json\'.\n </div>\n </div>',l='<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="'+a.image("paypal")+'" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',f=i.setup,d=function(e,t,n,i){var o=r(c).appTo("#tests");o.find(".label").text(e),o.find(".result").addCls(n?"passed":"failed").text(i?i:n?"yes":"no"),o.find(".info").html(t)},p=function(){f.AS_ADMIN&&(r(s).appTo("#content"),d("h5ai version","Only green if this is an official h5ai release",/^\d+\.\d+\.\d+$/.test(f.VERSION),f.VERSION),d("Index file found","Add <code>"+f.INDEX_HREF+"</code> to your index file list",f.INDEX_HREF),d("Options parsable","File <code>options.json</code> is readable and syntax is correct",null!==i.options),d("Types parsable","File <code>types.json</code> is readable and syntax is correct",null!==i.types),d("Server software","Server is one of apache, lighttpd, nginx or cherokee",f.HAS_SERVER,f.SERVER_NAME+" "+f.SERVER_VERSION),d("PHP version","PHP version >= "+f.MIN_PHP_VERSION,!0,f.PHP_VERSION),d("PHP arch","64-bit required to correctly display file/folder sizes > ~2GB","64-bit"===f.PHP_ARCH,f.PHP_ARCH),d("Public Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PUB),d("Private Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PRV),d("Image thumbs","PHP GD extension with JPEG support available",f.HAS_PHP_JPEG),d("Use EXIF thumbs","PHP EXIF extension available",f.HAS_PHP_EXIF),d("Movie thumbs","Command line program <code>avconv</code> or <code>ffmpeg</code> available",f.HAS_CMD_AVCONV||f.HAS_CMD_FFMPEG),d("PDF thumbs","Command line program <code>convert</code> or <code>gm</code> available",f.HAS_CMD_CONVERT||f.HAS_CMD_GM),d("Shell tar","Command line program <code>tar</code> available",f.HAS_CMD_TAR),d("Shell zip","Command line program <code>zip</code> available",f.HAS_CMD_ZIP),d("Shell du","Command line program <code>du</code> available",f.HAS_CMD_DU))},h=function(){e.window.location.reload()},g=function(){o.request({action:"login",pass:r("#pass").val()}).then(h)},m=function(){o.request({action:"logout"}).then(h)},v=function(e){13===e.which&&g()},b=function(){r(l).appTo("#content")},w=function(){r(u).appTo("#content"),f.AS_ADMIN?(r("#pass").rm(),r("#login").rm(),r("#logout").on("click",m)):(r("#pass").on("keydown",v)[0].focus(),r("#login").on("click",g),r("#logout").rm()),i.options.hasCustomPasshash&&r("#hint").rm()},y=function(){b(),w(),p()};y()}).call(t,function(){return this}())}]);
\ No newline at end of file
+/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */ !(function(e) {
+ function t(e, t) {
+ if (!t) throw ((i.className = r), new Error(r + ": " + e));
+ }
+
+ function n(e) {
+ return "function" == typeof e;
+ }
+ if (!e || e.window !== e || !e.document) throw new Error("no-window");
+ var r = "no-browser",
+ i = e.document.documentElement;
+ (i.className = ""),
+ t("console", e.console && n(e.console.log)),
+ t("assign", e.Object && n(e.Object.assign)),
+ t("promise", n(e.Promise)),
+ t("xhr", e.XMLHttpRequest);
+})(this),
+(function(e) {
+ function t(r) {
+ if (n[r]) return n[r].exports;
+ var i = (n[r] = { exports: {}, id: r, loaded: !1 });
+ return e[r].call(i.exports, i, i.exports, t), (i.loaded = !0), i.exports;
+ }
+ var n = {};
+ return (t.m = e), (t.c = n), (t.p = ""), t(0);
+})([
+ function(e, t, n) {
+ "use strict";
+ n(1);
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = r.awaitReady,
+ a = n(7),
+ s = i("script[data-module]").attr("data-module"),
+ c = { action: "get", setup: !0, options: !0, types: !0 };
+ if ("index" === s)(c.theme = !0), (c.langs = !0);
+ else {
+ if ("info" !== s) throw new Error("no-main-module: '" + s + "'");
+ c.refresh = !0;
+ }
+ a._update(c)
+ .then(function() {
+ return o();
+ })
+ .then(function() {
+ return n(9)("./" + s);
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ e.exports = Object.assign({}, n(3), n(4), n(5), n(6));
+ },
+ function(e, t) {
+ "use strict";
+ var n =
+ "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
+
+ function(e) {
+ return typeof e;
+ } :
+ function(e) {
+ return e &&
+ "function" == typeof Symbol &&
+ e.constructor === Symbol &&
+ e !== Symbol.prototype ?
+ "symbol" :
+ typeof e;
+ },
+ r = function(e) {
+ return void 0 !== e && null !== e;
+ },
+ i = function(e, t) {
+ return ("undefined" == typeof e ? "undefined" : n(e)) === t;
+ },
+ o = function(e) {
+ return i(e, "string");
+ },
+ a = function(e) {
+ return i(e, "function");
+ },
+ s = function(e) {
+ return i(e, "number");
+ },
+ c = function(e) {
+ return e && e.hasOwnProperty("length");
+ },
+ u = function(e) {
+ return !e || o(e) ?
+ [] :
+ (c(e) && (e = Array.from(e)), Object.keys(e));
+ },
+ l = function(e) {
+ return u(e).map(function(t) {
+ return e[t];
+ });
+ },
+ f = function(e, t) {
+ return u(e).forEach(function(n) {
+ return t(e[n], n);
+ });
+ },
+ d = function(e, t) {
+ return l(e).filter(t);
+ },
+ p = function(e, t) {
+ return l(e).map(t);
+ },
+ h = function(e, t) {
+ return l(e).indexOf(t) >= 0;
+ },
+ g = function(e) {
+ return d(e, function(e) {
+ return !!e;
+ });
+ },
+ m = function(e, t) {
+ return !!e && e instanceof t;
+ },
+ v = function(e) {
+ return Array.from(e);
+ },
+ b = function(e, t) {
+ return (
+ (t = l(t)),
+ d(e, function(e) {
+ return t.indexOf(e) < 0;
+ })
+ );
+ },
+ w = function(e, t) {
+ return (
+ (t = l(t)),
+ d(e, function(e) {
+ return t.indexOf(e) >= 0;
+ })
+ );
+ },
+ y = function(e, t) {
+ return e < t ? -1 : e > t ? 1 : 0;
+ },
+ x = function(e, t) {
+ var n = a(t) ?
+ t :
+ function(e) {
+ return e[t];
+ },
+ r = function(e, t) {
+ return y(n(e), n(t));
+ };
+ return l(e).sort(r);
+ },
+ k = function(e, t) {
+ var n = null;
+ return function() {
+ clearTimeout(n), (n = setTimeout(e, t));
+ };
+ };
+ e.exports = {
+ is: r,
+ isStr: o,
+ isFn: a,
+ isNum: s,
+ hasLength: c,
+ keys: u,
+ values: l,
+ each: f,
+ filter: d,
+ map: p,
+ includes: h,
+ compact: g,
+ isInstanceOf: m,
+ toArray: v,
+ difference: b,
+ intersection: w,
+ cmp: y,
+ sortBy: x,
+ debounce: k,
+ };
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+
+ function r(e) {
+ if (Array.isArray(e)) {
+ for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t];
+ return n;
+ }
+ return Array.from(e);
+ }
+ var i = (function() {
+ function e(e, t) {
+ var n = [],
+ r = !0,
+ i = !1,
+ o = void 0;
+ try {
+ for (
+ var a, s = e[Symbol.iterator](); !(r = (a = s.next()).done) &&
+ (n.push(a.value), !t || n.length !== t); r = !0
+ );
+ } catch (e) {
+ (i = !0), (o = e);
+ } finally {
+ try {
+ !r && s.return && s.return();
+ } finally {
+ if (i) throw o;
+ }
+ }
+ return n;
+ }
+ return function(t, n) {
+ if (Array.isArray(t)) return t;
+ if (Symbol.iterator in Object(t)) return e(t, n);
+ throw new TypeError(
+ "Invalid attempt to destructure non-iterable instance"
+ );
+ };
+ })(),
+ o = n(3),
+ a = o.each,
+ s = o.filter,
+ c = o.hasLength,
+ u = o.is,
+ l = o.isStr,
+ f = o.map,
+ d = o.isInstanceOf,
+ p = o.toArray,
+ h = t.window,
+ g = h.document,
+ m = (function() {
+ var e = function(e) {
+ return g.createElement(e);
+ },
+ t = [
+ [/^<t(head|body|foot)|^<c(ap|olg)/i, e("table")],
+ [/^<col/i, e("colgroup")],
+ [/^<tr/i, e("tbody")],
+ [/^<t[dh]/i, e("tr")],
+ ],
+ n = e("div"),
+ r = function(e) {
+ var r = !0,
+ o = !1,
+ a = void 0;
+ try {
+ for (
+ var s, c = t[Symbol.iterator](); !(r = (s = c.next()).done); r = !0
+ ) {
+ var u = s.value,
+ l = i(u, 2),
+ f = l[0],
+ d = l[1];
+ if (f.test(e)) return d;
+ }
+ } catch (e) {
+ (o = !0), (a = e);
+ } finally {
+ try {
+ !r && c.return && c.return();
+ } finally {
+ if (o) throw a;
+ }
+ }
+ return n;
+ };
+ return function(e) {
+ var t = r(e);
+ t.innerHTML = e;
+ var n = p(t.childNodes);
+ return (
+ a(n, function(e) {
+ return t.removeChild(e);
+ }),
+ (t.innerHTML = ""),
+ n
+ );
+ };
+ })(),
+ v = function(e) {
+ var t =
+ arguments.length > 1 && void 0 !== arguments[1] ?
+ arguments[1] :
+ g;
+ try {
+ return p(t.querySelectorAll(e));
+ } catch (e) {
+ return [];
+ }
+ },
+ b = function(e) {
+ return d(e, h.Element);
+ },
+ w = function(e) {
+ return d(e, h.Document);
+ },
+ y = function(e) {
+ return u(e) && e.window === e && w(e.document);
+ },
+ x = function(e) {
+ return b(e) || w(e) || y(e);
+ },
+ k = function(e, t, n) {
+ return e.addEventListener(t, n);
+ },
+ _ = function(e, t, n) {
+ return e.removeEventListener(t, n);
+ },
+ C = new Promise(function(e) {
+ /^(i|c|loade)/.test(g.readyState) ?
+ e() :
+ k(g, "DOMContentLoaded", function() {
+ return e();
+ });
+ }),
+ S = function() {
+ return C;
+ },
+ A = new Promise(function(e) {
+ k(h, "load", function() {
+ return e();
+ });
+ }),
+ T = function() {
+ return A;
+ },
+ E = function e(t) {
+ if (d(t, e)) return t;
+ var n = void 0;
+ return (
+ l(t) ?
+ ((t = t.trim()), (n = "<" === t[0] ? m(t) : v(t))) :
+ (n = x(t) ? [t] : c(t) ? t : [t]),
+ (n = s(n, x)),
+ Object.assign(Object.create(e.prototype), n, { length: n.length })
+ );
+ };
+ (E.prototype = {
+ constructor: E,
+ each: function(e) {
+ return a(this, e), this;
+ },
+ map: function(e) {
+ return f(this, e);
+ },
+ find: function(e) {
+ var t;
+ return E(
+ (t = []).concat.apply(
+ t,
+ r(
+ this.map(function(t) {
+ return v(e, t);
+ })
+ )
+ )
+ );
+ },
+ on: function(e, t) {
+ return this.each(function(n) {
+ return k(n, e, t);
+ });
+ },
+ off: function(e, t) {
+ return this.each(function(n) {
+ return _(n, e, t);
+ });
+ },
+ attr: function(e, t) {
+ return void 0 === t ?
+ this.length ?
+ this[0].getAttribute(e) :
+ void 0 :
+ this.each(function(n) {
+ return n.setAttribute(e, t);
+ });
+ },
+ rmAttr: function(e) {
+ return this.each(function(t) {
+ return t.removeAttribute(e);
+ });
+ },
+ prop: function(e, t) {
+ return void 0 === t ?
+ this.length ?
+ this[0][e] :
+ void 0 :
+ this.each(function(n) {
+ n[e] = t;
+ });
+ },
+ rmProp: function(e) {
+ return this.each(function(t) {
+ return delete t[e];
+ });
+ },
+ val: function(e) {
+ return void 0 === e ?
+ this.length ?
+ this[0].value :
+ void 0 :
+ this.each(function(t) {
+ t.value = e;
+ });
+ },
+ html: function(e) {
+ return void 0 === e ?
+ this.map(function(e) {
+ return e.innerHTML;
+ }).join("") :
+ this.each(function(t) {
+ t.innerHTML = e;
+ });
+ },
+ text: function(e) {
+ return void 0 === e ?
+ this.map(function(e) {
+ return e.textContent;
+ }).join("") :
+ this.each(function(t) {
+ t.textContent = e;
+ });
+ },
+ clr: function() {
+ return this.html("");
+ },
+ rm: function() {
+ return this.each(function(e) {
+ var t = e.parentNode;
+ t && t.removeChild(e);
+ });
+ },
+ rpl: function(e) {
+ return this.each(function(t) {
+ var n = t.parentNode;
+ n && n.replaceChild(E(e)[0], t);
+ });
+ },
+ app: function(e) {
+ return this.each(function(t) {
+ E(e).each(function(e) {
+ return t.appendChild(e);
+ });
+ });
+ },
+ appTo: function(e) {
+ return E(e).app(this), this;
+ },
+ pre: function(e) {
+ return this.each(function(t) {
+ E(e).each(function(e) {
+ var n = t.firstChild;
+ n ? t.insertBefore(e, n) : t.appendChild(e);
+ });
+ });
+ },
+ preTo: function(e) {
+ return E(e).pre(this), this;
+ },
+ cls: function() {
+ return arguments.length ?
+ (this.each(function(e) {
+ e.className = "";
+ }),
+ this.addCls.apply(this, arguments)) :
+ this.length ?
+ p(this[0].classList) :
+ [];
+ },
+ hasCls: function(e) {
+ return p(this).every(function(t) {
+ return t.classList.contains(e);
+ });
+ },
+ addCls: function() {
+ for (var e = arguments.length, t = Array(e), n = 0; n < e; n++)
+ t[n] = arguments[n];
+ return this.each(function(e) {
+ var n = !0,
+ r = !1,
+ i = void 0;
+ try {
+ for (
+ var o, a = t[Symbol.iterator](); !(n = (o = a.next()).done); n = !0
+ ) {
+ var s = o.value;
+ e.classList.add(s);
+ }
+ } catch (e) {
+ (r = !0), (i = e);
+ } finally {
+ try {
+ !n && a.return && a.return();
+ } finally {
+ if (r) throw i;
+ }
+ }
+ });
+ },
+ rmCls: function() {
+ for (var e = arguments.length, t = Array(e), n = 0; n < e; n++)
+ t[n] = arguments[n];
+ return this.each(function(e) {
+ var n = !0,
+ r = !1,
+ i = void 0;
+ try {
+ for (
+ var o, a = t[Symbol.iterator](); !(n = (o = a.next()).done); n = !0
+ ) {
+ var s = o.value;
+ e.classList.remove(s);
+ }
+ } catch (e) {
+ (r = !0), (i = e);
+ } finally {
+ try {
+ !n && a.return && a.return();
+ } finally {
+ if (r) throw i;
+ }
+ }
+ });
+ },
+ tglCls: function() {
+ for (var e = arguments.length, t = Array(e), n = 0; n < e; n++)
+ t[n] = arguments[n];
+ return this.each(function(e) {
+ var n = !0,
+ r = !1,
+ i = void 0;
+ try {
+ for (
+ var o, a = t[Symbol.iterator](); !(n = (o = a.next()).done); n = !0
+ ) {
+ var s = o.value;
+ e.classList.contains(s) ?
+ e.classList.remove(s) :
+ e.classList.add(s);
+ }
+ } catch (e) {
+ (r = !0), (i = e);
+ } finally {
+ try {
+ !n && a.return && a.return();
+ } finally {
+ if (r) throw i;
+ }
+ }
+ });
+ },
+ parent: function() {
+ return E(
+ this.map(function(e) {
+ return e.parentNode;
+ })
+ );
+ },
+ children: function() {
+ var e;
+ return E(
+ (e = []).concat.apply(
+ e,
+ r(
+ this.map(function(e) {
+ return p(e.children);
+ })
+ )
+ )
+ );
+ },
+ hide: function() {
+ return this.addCls("hidden");
+ },
+ show: function() {
+ return this.rmCls("hidden");
+ },
+ isHidden: function() {
+ return this.hasCls("hidden");
+ },
+ css: function(e) {
+ return this.each(function(t) {
+ return Object.assign(t.style, e);
+ });
+ },
+ }),
+ (e.exports = { awaitReady: S, awaitLoad: T, dom: E });
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t) {
+ "use strict";
+ var n =
+ "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
+
+ function(e) {
+ return typeof e;
+ } :
+ function(e) {
+ return e &&
+ "function" == typeof Symbol &&
+ e.constructor === Symbol &&
+ e !== Symbol.prototype ?
+ "symbol" :
+ typeof e;
+ },
+ r = /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,
+ i = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
+ o = /^0x[0-9a-f]+$/i,
+ a = /^0/,
+ s = function(e, t) {
+ var s = String(e).trim(),
+ c = String(t).trim(),
+ u = s
+ .replace(r, "\0$1\0")
+ .replace(/\0$/, "")
+ .replace(/^\0/, "")
+ .split("\0"),
+ l = c
+ .replace(r, "\0$1\0")
+ .replace(/\0$/, "")
+ .replace(/^\0/, "")
+ .split("\0"),
+ f =
+ parseInt(s.match(o), 16) ||
+ (1 !== u.length && s.match(i) && Date.parse(s)),
+ d =
+ parseInt(c.match(o), 16) ||
+ (f && c.match(i) && Date.parse(c)) ||
+ null;
+ if (d) {
+ if (f < d) return -1;
+ if (f > d) return 1;
+ }
+ for (var p = 0, h = Math.max(u.length, l.length); p < h; p += 1) {
+ var g = (!(u[p] || "").match(a) && parseFloat(u[p])) || u[p] || 0,
+ m = (!(l[p] || "").match(a) && parseFloat(l[p])) || l[p] || 0;
+ if (isNaN(g) !== isNaN(m)) return isNaN(g) ? 1 : -1;
+ if (
+ (("undefined" == typeof g ? "undefined" : n(g)) !==
+ ("undefined" == typeof m ? "undefined" : n(m)) &&
+ ((g = String(g)), (m = String(m))),
+ g < m)
+ )
+ return -1;
+ if (g > m) return 1;
+ }
+ return 0;
+ };
+ e.exports = { naturalCmp: s };
+ },
+ function(e, t) {
+ "use strict";
+ var n = function(e) {
+ return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g, "\\$&");
+ },
+ r = function(e, t) {
+ return t ?
+ "re:" === e.substr(0, 3) ?
+ e.substr(3) :
+ e
+ .trim()
+ .split(/\s+/)
+ .map(function(e) {
+ return e
+ .split("")
+ .map(function(e) {
+ return n(e);
+ })
+ .join(".*?");
+ })
+ .join("|") :
+ n(e);
+ };
+ e.exports = { parsePattern: r };
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(8),
+ i = r.request,
+ o = (e.exports = {
+ _update: function(e) {
+ return i(e).then(function(e) {
+ return Object.assign(o, e);
+ });
+ },
+ });
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = t.window.XMLHttpRequest,
+ s = function(e) {
+ return new Promise(function(t) {
+ var n = new a(),
+ r = function() {
+ if (n.readyState === a.DONE)
+ try {
+ t(JSON.parse(n.responseText));
+ } catch (e) {
+ t({ err: e, txt: n.responseText });
+ }
+ };
+ n.open("POST", "?", !0),
+ (n.onreadystatechange = r),
+ n.setRequestHeader(
+ "Content-Type",
+ "application/json;charset=utf-8"
+ ),
+ n.send(JSON.stringify(e));
+ });
+ },
+ c = function(e) {
+ var t = o('<form method="post" action="?" style="display:none;"/>');
+ i(e, function(e, n) {
+ o('<input type="hidden"/>')
+ .attr("name", n)
+ .attr("value", e)
+ .appTo(t);
+ }),
+ t.appTo("body"),
+ t[0].submit(),
+ t.rm();
+ };
+ e.exports = { request: s, formRequest: c };
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ function r(e) {
+ return n(i(e));
+ }
+
+ function i(e) {
+ return (
+ o[e] ||
+ (function() {
+ throw new Error("Cannot find module '" + e + "'.");
+ })()
+ );
+ }
+ var o = {
+ "./index": 10,
+ "./index.js": 10,
+ "./info": 50,
+ "./info.js": 50,
+ };
+ (r.keys = function() {
+ return Object.keys(o);
+ }),
+ (r.resolve = i),
+ (e.exports = r),
+ (r.id = 9);
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ n(11),
+ n(24),
+ n(25),
+ n(26),
+ n(27),
+ n(29),
+ n(30),
+ n(31),
+ n(32),
+ n(34),
+ n(36),
+ n(37),
+ n(44),
+ n(45),
+ n(46),
+ n(47),
+ n(48),
+ n(49);
+ var t = e.window.document.location.href;
+ n(20).setLocation(t, !0);
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(12),
+ s = n(13),
+ c = n(14),
+ u = n(15),
+ l = n(17),
+ f = n(18),
+ d = Object.assign({ modeToggle: !1 }, c.view),
+ p =
+ '<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',
+ h =
+ '<div id="viewmode-[MODE]" class="button mode">\n <img src="' +
+ s.image("view-[MODE]") +
+ '" alt="viewmode-[MODE]"/>\n </div>',
+ g = '<input id="viewmode-size" type="range" min="0" max="0" value="0">',
+ m =
+ '<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',
+ v = void 0,
+ b = void 0,
+ w = function(e, t) {
+ o("#viewmode-settings .mode").rmCls("active"),
+ o("#viewmode-" + e).addCls("active"),
+ o("#viewmode-size").val(b.indexOf(t)),
+ "next" === d.modeToggle && (e = v[(v.indexOf(e) + 1) % v.length]),
+ o("#viewmode-toggle img").attr("src", s.image("view-" + e));
+ },
+ y = function() {
+ if (!(v.length < 2 && b.length < 2)) {
+ var e = o(p);
+ if (
+ (v.length > 1 &&
+ i(v, function(t) {
+ o(h.replace(/\[MODE\]/g, t))
+ .on("click", function() {
+ f.setMode(t);
+ })
+ .appTo(e);
+ }),
+ b.length > 1)
+ ) {
+ var t = b.length - 1;
+ o(g)
+ .attr("max", t)
+ .on("input", function(e) {
+ return f.setSize(b[e.target.valueAsNumber]);
+ })
+ .on("change", function(e) {
+ return f.setSize(b[e.target.valueAsNumber]);
+ })
+ .appTo(e);
+ }
+ e.appTo(u.$el);
+ }
+ },
+ x = function() {
+ var e = f.getMode(),
+ t = (v.indexOf(e) + 1) % v.length,
+ n = v[t];
+ f.setMode(n);
+ },
+ k = function() {
+ d.modeToggle && v.length > 1 && o(m).on("click", x).appTo(l.$toolbar);
+ },
+ _ = function() {
+ (v = f.getModes()),
+ (b = f.getSizes()),
+ y(),
+ k(),
+ w(f.getMode(), f.getSize()),
+ a.sub("view.mode.changed", w);
+ };
+ _();
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.isStr,
+ o = r.isFn,
+ a = r.dom,
+ s = {},
+ c = function(e, t) {
+ i(e) && o(t) && (s[e] || (s[e] = []), s[e].push(t));
+ },
+ u = function(e) {
+ for (
+ var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++
+ )
+ n[r - 1] = arguments[r];
+ i(e) &&
+ s[e] &&
+ s[e].forEach(function(t) {
+ t.apply(e, n);
+ });
+ };
+ a(t.window).on("resize", function() {
+ return u("resize");
+ }),
+ (e.exports = { sub: c, pub: u });
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.includes,
+ o = n(7),
+ a = n(14),
+ s = a.publicHref + "images/",
+ c = s + "ui/",
+ u = s + "themes/",
+ l = u + "default/",
+ f = [
+ "file",
+ "folder",
+ "folder-page",
+ "folder-parent",
+ "ar",
+ "aud",
+ "bin",
+ "img",
+ "txt",
+ "vid",
+ "x",
+ ],
+ d = function(e) {
+ return c + e + ".svg";
+ },
+ p = function(e) {
+ var t = (e || "").split("-")[0],
+ n = o.theme[e] || o.theme[t];
+ return n ?
+ u + n :
+ i(f, e) ?
+ l + e + ".svg" :
+ i(f, t) ?
+ l + t + ".svg" :
+ l + "file.svg";
+ };
+ e.exports = { image: d, icon: p };
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(7);
+ e.exports = Object.assign({}, r.options, {
+ publicHref: r.setup.PUBLIC_HREF,
+ rootHref: r.setup.ROOT_HREF,
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(13),
+ a = n(14),
+ s = n(16),
+ c = n(17),
+ u = Object.assign({ disableSidebar: !1 }, a.view),
+ l = "sidebarIsVisible",
+ f = '<div id="sidebar"></div>',
+ d =
+ '<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',
+ p = function() {
+ var e = i(f).hide(),
+ t = i(d),
+ n = t.find("img"),
+ r = function(r) {
+ var i = s.get(l);
+ r && ((i = !i), s.put(l, i)),
+ i ?
+ (t.addCls("active"),
+ n.attr("src", o.image("back")),
+ e.show()) :
+ (t.rmCls("active"),
+ n.attr("src", o.image("sidebar")),
+ e.hide());
+ };
+ return (
+ u.disableSidebar ||
+ (e.appTo(c.$mainrow),
+ t.appTo(c.$toolbar).on("click", function() {
+ return r(!0);
+ }),
+ r()), { $el: e }
+ );
+ };
+ e.exports = p();
+ },
+ function(e, t) {
+ (function(t) {
+ "use strict";
+ var n = t.window.localStorage,
+ r = "_h5ai",
+ i = function() {
+ try {
+ return JSON.parse(n[r]);
+ } catch (e) {}
+ return {};
+ },
+ o = function(e) {
+ n[r] = JSON.stringify(e);
+ },
+ a = function(e, t) {
+ var n = i();
+ (n[e] = t), o(n);
+ },
+ s = function(e) {
+ return i()[e];
+ };
+ e.exports = { put: a, get: s };
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = "body",
+ a =
+ '<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',
+ s =
+ '<div id="mainrow">\n <div id="content"></div>\n </div>',
+ c = function() {
+ var e = i(o).attr("id", "root").clr().app(a).app(s);
+ return {
+ $root: e,
+ $topbar: e.find("#topbar"),
+ $toolbar: e.find("#toolbar"),
+ $flowbar: e.find("#flowbar"),
+ $mainrow: e.find("#mainrow"),
+ $content: e.find("#content"),
+ };
+ };
+ e.exports = c();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.map,
+ a = r.includes,
+ s = r.intersection,
+ c = r.dom,
+ u = n(12),
+ l = n(19),
+ f = n(20),
+ d = n(13),
+ p = n(16),
+ h = n(14),
+ g = n(17),
+ m = ["details", "grid", "icons"],
+ v = [20, 40, 60, 80, 100, 150, 200, 250, 300, 350, 400],
+ b = Object.assign({
+ binaryPrefix: !1,
+ hideFolders: !1,
+ hideParentFolder: !1,
+ maxIconSize: 40,
+ modes: m,
+ setParentFolderLabels: !1,
+ sizes: v,
+ },
+ h.view
+ ),
+ w = b.sizes.sort(function(e, t) {
+ return e - t;
+ }),
+ y = s(b.modes, m),
+ x = "view",
+ k =
+ '<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',
+ _ =
+ '<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',
+ C = c(k),
+ S = C.find("#items"),
+ A = C.find("#view-hint"),
+ T = function(e, t, n) {
+ return Math.min(n, Math.max(t, e));
+ },
+ E = function(e) {
+ var t = T(e, 20, 80),
+ n = T(e, 40, 160),
+ r = T(e, 80, 1e3),
+ i = Math.round((4 * r) / 3),
+ o = "!important;",
+ a = "#view.view-details.view-size-" + e,
+ s = "#view.view-grid.view-size-" + e,
+ c = "#view.view-icons.view-size-" + e,
+ u = [
+ a + " .item .label {line-height: " + (t + 14) + "px " + o + "}",
+ a + " .item .date {line-height: " + (t + 14) + "px " + o + "}",
+ a + " .item .size {line-height: " + (t + 14) + "px " + o + "}",
+ a +
+ " .square {width: " +
+ t +
+ "px " +
+ o +
+ " height: " +
+ t +
+ "px " +
+ o +
+ "}",
+ a +
+ " .square img {width: " +
+ t +
+ "px " +
+ o +
+ " height: " +
+ t +
+ "px " +
+ o +
+ "}",
+ a + " .label {margin-left: " + (t + 32) + "px " + o + "}",
+ s + " .item .label {line-height: " + n + "px " + o + "}",
+ s +
+ " .square {width: " +
+ n +
+ "px " +
+ o +
+ " height: " +
+ n +
+ "px " +
+ o +
+ "}",
+ s +
+ " .square img {width: " +
+ n +
+ "px " +
+ o +
+ " height: " +
+ n +
+ "px " +
+ o +
+ "}",
+ c + " .item {width: " + i + "px " + o + "}",
+ c +
+ " .landscape {width: " +
+ i +
+ "px " +
+ o +
+ " height: " +
+ r +
+ "px " +
+ o +
+ "}",
+ c +
+ " .landscape img {width: " +
+ r +
+ "px " +
+ o +
+ " height: " +
+ r +
+ "px " +
+ o +
+ "}",
+ c + " .landscape .thumb {width: " + i + "px " + o + "}",
+ ];
+ return u.join("\n");
+ },
+ M = function() {
+ var e = o(w, function(e) {
+ return E(e);
+ });
+ e.push(
+ "#view .icon img {max-width: " +
+ b.maxIconSize +
+ "px; max-height: " +
+ b.maxIconSize +
+ "px;}"
+ ),
+ c("<style></style>").text(e.join("\n")).appTo("head");
+ },
+ D = function(e, t) {
+ var n = p.get(x);
+ (e = e || (n && n.mode)),
+ (t = t || (n && n.size)),
+ (e = a(b.modes, e) ? e : b.modes[0]),
+ (t = a(b.sizes, t) ? t : b.sizes[0]),
+ p.put(x, { mode: e, size: t }),
+ i(y, function(t) {
+ t === e ? C.addCls("view-" + t) : C.rmCls("view-" + t);
+ }),
+ i(w, function(e) {
+ e === t ? C.addCls("view-size-" + e) : C.rmCls("view-size-" + e);
+ }),
+ u.pub("view.mode.changed", e, t);
+ },
+ P = function() {
+ return y;
+ },
+ z = function() {
+ return p.get(x).mode;
+ },
+ L = function(e) {
+ return D(e, null);
+ },
+ $ = function() {
+ return w;
+ },
+ H = function() {
+ return p.get(x).size;
+ },
+ O = function(e) {
+ return D(null, e);
+ },
+ B = function(e) {
+ var t = e.target._item;
+ u.pub("item.mouseenter", t);
+ },
+ R = function(e) {
+ var t = e.target._item;
+ u.pub("item.mouseleave", t);
+ },
+ N = function(e) {
+ var t = c(_),
+ n = t.find("a"),
+ r = t.find(".icon img"),
+ i = t.find(".label"),
+ o = t.find(".date"),
+ a = t.find(".size");
+ return (
+ t
+ .addCls(e.isFolder() ? "folder" : "file")
+ .on("mouseenter", B)
+ .on("mouseleave", R),
+ f.setLink(n, e),
+ i.text(e.label).attr("title", e.label),
+ o.attr("data-time", e.time).text(l.formatDate(e.time)),
+ a.attr("data-bytes", e.size).text(l.formatSize(e.size)),
+ (e.icon = d.icon(e.type)),
+ e.isFolder() &&
+ !e.isManaged &&
+ (t.addCls("page"), (e.icon = d.icon("folder-page"))),
+ e.isCurrentParentFolder() &&
+ ((e.icon = d.icon("folder-parent")),
+ b.setParentFolderLabels || i.addCls("l10n-parentDirectory"),
+ t.addCls("folder-parent")),
+ r.attr("src", e.icon).attr("alt", e.type),
+ (e.$view = t),
+ (t[0]._item = e),
+ t
+ );
+ },
+ I = function() {
+ var e = S.find(".item").length === S.find(".folder-parent").length;
+ e ? A.show() : A.hide();
+ },
+ j = function(e) {
+ var t = o(S.find(".item"), function(e) {
+ return e._item;
+ });
+ S.find(".item").rm(),
+ i(e, function(e) {
+ return S.app(N(e));
+ }),
+ (g.$content[0].scrollLeft = 0),
+ (g.$content[0].scrollTop = 0),
+ I(),
+ u.pub("view.changed", e, t);
+ },
+ F = function(e, t) {
+ i(e, function(e) {
+ N(e).hide().appTo(S).show();
+ }),
+ i(t, function(e) {
+ e.$view.hide().rm();
+ }),
+ I(),
+ u.pub("view.changed", e, t);
+ },
+ q = function(e) {
+ A.rmCls().addCls("l10n-" + e), I();
+ },
+ Y = function(e) {
+ e || (e = f.getItem());
+ var t = [];
+ e.parent && !b.hideParentFolder && t.push(e.parent),
+ i(e.content, function(e) {
+ (e.isFolder() && b.hideFolders) || t.push(e);
+ }),
+ q("empty"),
+ j(t);
+ },
+ Z = function(e, t, n) {
+ var r = [];
+ i(t, function(e) {
+ (e.isFolder() && b.hideFolders) || r.push(e);
+ }),
+ q("empty"),
+ F(r, n);
+ },
+ U = function() {
+ var e = C[0].offsetWidth;
+ C.rmCls("width-0").rmCls("width-1"),
+ e < 320 ? C.addCls("width-0") : e < 480 && C.addCls("width-1");
+ },
+ V = function() {
+ M(),
+ D(),
+ C.appTo(g.$content),
+ A.hide(),
+ l.setDefaultMetric(b.binaryPrefix),
+ u.sub("location.changed", Y),
+ u.sub("location.refreshed", Z),
+ u.sub("resize", U),
+ U();
+ };
+ V(),
+ (e.exports = {
+ $el: C,
+ setItems: j,
+ changeItems: F,
+ setLocation: Y,
+ setHint: q,
+ getModes: P,
+ getMode: z,
+ setMode: L,
+ getSizes: $,
+ getSize: H,
+ setSize: O,
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.isNum,
+ o = {
+ t: 1e3,
+ k: 1e3,
+ u: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],
+ },
+ a = {
+ t: 1024,
+ k: 1024,
+ u: ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"],
+ },
+ s = o,
+ c = [
+ [/YYYY/, "Y", 4],
+ [/YY/, "Y", 2],
+ [/Y/, "Y", 0],
+ [/MM/, "M", 2],
+ [/M/, "M", 0],
+ [/DD/, "D", 2],
+ [/D/, "D", 0],
+ [/HH/, "H", 2],
+ [/H/, "H", 0],
+ [/mm/, "m", 2],
+ [/m/, "m", 0],
+ [/ss/, "s", 2],
+ [/s/, "s", 0],
+ ],
+ u = "YYYY-MM-DD HH:mm",
+ l = function(e) {
+ s = e ? a : o;
+ },
+ f = function(e, t) {
+ if (((t = t || s), !i(e) || e < 0)) return "";
+ for (var n = 0, r = t.u.length - 1; e >= t.t && n < r;)
+ (e /= t.k), (n += 1);
+ return (
+ (n <= 1 ? Math.round(e) : e.toFixed(1)).toString() + " " + t.u[n]
+ );
+ },
+ d = function(e) {
+ u = e;
+ },
+ p = function(e, t) {
+ var n = String(e);
+ return t && (n = ("000" + n).substr(-t)), n;
+ },
+ h = function(e, t) {
+ if (!e || !i(e)) return "";
+ t = t || u;
+ var n = new Date(e),
+ r = {
+ Y: n.getFullYear(),
+ M: n.getMonth() + 1,
+ D: n.getDate(),
+ H: n.getHours(),
+ m: n.getMinutes(),
+ s: n.getSeconds(),
+ };
+ return (
+ c.forEach(function(e) {
+ t = t.replace(e[0], p(r[e[1]], e[2]));
+ }),
+ t
+ );
+ };
+ e.exports = {
+ setDefaultMetric: l,
+ formatSize: f,
+ setDefaultDateFormat: d,
+ formatDate: h,
+ };
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.values,
+ a = r.difference,
+ s = n(8),
+ c = s.request,
+ u = n(14),
+ l = n(12),
+ f = n(21),
+ d = t.window,
+ p = d.document,
+ h = Object.assign({ fastBrowsing: !0, unmanagedInNewWindow: !0 },
+ u.view
+ ),
+ g = h.fastBrowsing ? d.history : null,
+ m = /^.*:\/\/[^\/]*|[^\/]*$/g,
+ v = [
+ [/\/+/g, "/"],
+ [/ /g, "%20"],
+ [/!/g, "%21"],
+ [/#/g, "%23"],
+ [/\$/g, "%24"],
+ [/&/g, "%26"],
+ [/'/g, "%27"],
+ [/\(/g, "%28"],
+ [/\)/g, "%29"],
+ [/\*/g, "%2A"],
+ [/\+/g, "%2B"],
+ [/\,/g, "%2C"],
+ [/:/g, "%3A"],
+ [/;/g, "%3B"],
+ [/\=/g, "%3D"],
+ [/\?/g, "%3F"],
+ [/@/g, "%40"],
+ [/\[/g, "%5B"],
+ [/\]/g, "%5D"],
+ ],
+ b = null,
+ w = function(e) {
+ return v.reduce(function(e, t) {
+ return e.replace(t[0], t[1]);
+ }, e);
+ },
+ y = function(e) {
+ return e.replace(m, "");
+ },
+ x = (function() {
+ var e = "/a b",
+ t = p.createElement("a");
+ return (t.href = e), y(t.href) === e;
+ })(),
+ k = function(e) {
+ var t = p.createElement("a"),
+ n = void 0;
+ return (
+ (t.href = e),
+ (n = y(t.href)),
+ x && (n = encodeURIComponent(n).replace(/%2F/gi, "/")),
+ w(n)
+ );
+ },
+ _ = function() {
+ return p.domain;
+ },
+ C = function() {
+ return b;
+ },
+ S = function() {
+ return n(22).get(b);
+ },
+ A = function() {
+ return c({ action: "get", items: { href: b, what: 1 } }).then(
+ function(e) {
+ var t = n(22),
+ r = t.get(b);
+ if (e) {
+ var o = {};
+ i(e.items, function(e) {
+ var n = t.get(e);
+ o[n.absHref] = !0;
+ }),
+ i(r.content, function(e) {
+ o[e.absHref] || t.remove(e.absHref);
+ });
+ }
+ return r;
+ }
+ );
+ },
+ T = function() {
+ var e = S(),
+ t = o(e.content);
+ l.pub("location.beforeRefresh"),
+ A().then(function() {
+ var n = o(e.content),
+ r = a(n, t),
+ i = a(t, n);
+ l.pub("location.refreshed", e, r, i);
+ });
+ },
+ E = function(e, t) {
+ l.pub("location.beforeChange"),
+ (e = k(e)),
+ b !== e &&
+ ((b = e),
+ g &&
+ (t ?
+ g.replaceState({ absHref: b }, "", b) :
+ g.pushState({ absHref: b }, "", b)));
+ var n = S();
+ n.isLoaded ?
+ (l.pub("location.changed", n), T()) :
+ (f.set("loading..."),
+ A().then(function() {
+ (n.isLoaded = !0), f.set(), l.pub("location.changed", n);
+ }));
+ },
+ M = function(e, t) {
+ e.attr("href", t.absHref),
+ g &&
+ t.isFolder() &&
+ t.isManaged &&
+ e.on("click", function(e) {
+ return E(t.absHref), e.preventDefault(), !1;
+ }),
+ h.unmanagedInNewWindow &&
+ !t.isManaged &&
+ e.attr("target", "_blank");
+ },
+ D = function(e) {
+ e.state && e.state.absHref && E(e.state.absHref, !0);
+ };
+ (d.onpopstate = g ? D : null),
+ (e.exports = {
+ forceEncoding: w,
+ getDomain: _,
+ getAbsHref: C,
+ getItem: S,
+ setLocation: E,
+ refresh: T,
+ setLink: M,
+ });
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(17),
+ a = function() {
+ var e = i('<div id="notification"></div>').hide().appTo(o.$root),
+ t = function(t) {
+ t ? e.html(t).show() : e.hide();
+ };
+ return { set: t };
+ };
+ e.exports = a();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.keys,
+ o = r.each,
+ a = r.filter,
+ s = r.sortBy,
+ c = r.isStr,
+ u = r.isNum,
+ l = n(8),
+ f = n(20),
+ d = n(14),
+ p = n(23),
+ h = /\/$/,
+ g = /^(.*\/)([^\/]+\/?)$/,
+ m = {},
+ v = function(e, t) {
+ return c(e) && e.startsWith(t);
+ },
+ b = function(e) {
+ e = e.replace(h, "");
+ try {
+ e = decodeURIComponent(e);
+ } catch (e) {}
+ return e;
+ },
+ w = function(e) {
+ if ("/" === e) return { parent: null, name: "/" };
+ var t = g.exec(e);
+ if (!t) return null;
+ var n = { parent: t[1], name: t[2] };
+ return n.parent && !v(n.parent, d.rootHref) && (n.parent = null), n;
+ },
+ y = function(e) {
+ if (c(e)) e = { href: e };
+ else if (!e || !c(e.href)) return null;
+ var t = f.forceEncoding(e.href);
+ if (!v(t, d.rootHref)) return null;
+ var n = m[t] || _(t);
+ return (
+ u(e.time) && (n.time = e.time),
+ u(e.size) && (n.size = e.size),
+ e.managed && (n.isManaged = !0),
+ e.fetched && (n.isContentFetched = !0),
+ n
+ );
+ },
+ x = function e(t) {
+ t = f.forceEncoding(t);
+ var n = m[t];
+ n &&
+ (delete m[t],
+ n.parent && delete n.parent.content[n.absHref],
+ o(n.content, function(t) {
+ e(t.absHref);
+ }));
+ },
+ k = function(e) {
+ return new Promise(function(t) {
+ var n = y(e);
+ n.isContentFetched ?
+ t(n) :
+ l
+ .request({
+ action: "get",
+ items: { href: n.absHref, what: 1 },
+ })
+ .then(function(e) {
+ e.items &&
+ o(e.items, function(e) {
+ y(e);
+ }),
+ t(n);
+ });
+ });
+ },
+ _ = function e(t) {
+ var n = w(t),
+ r = Object.assign(Object.create(e.prototype), {
+ absHref: t,
+ type: p.getType(t),
+ label: b("/" === t ? f.getDomain() : n.name),
+ time: null,
+ size: null,
+ parent: null,
+ isManaged: null,
+ content: {},
+ });
+ return (
+ (m[t] = r),
+ n.parent &&
+ ((r.parent = y(n.parent)),
+ (r.parent.content[r.absHref] = r),
+ i(r.parent.content).length > 1 &&
+ (r.parent.isContentFetched = !0)),
+ r
+ );
+ };
+ (_.prototype = {
+ constructor: _,
+ isFolder: function() {
+ return h.test(this.absHref);
+ },
+ isCurrentFolder: function() {
+ return this.absHref === f.getAbsHref();
+ },
+ isInCurrentFolder: function() {
+ return !!this.parent && this.parent.isCurrentFolder();
+ },
+ isCurrentParentFolder: function() {
+ var e = y(f.getAbsHref());
+ return !!e && this === e.parent;
+ },
+ isDomain: function() {
+ return "/" === this.absHref;
+ },
+ isRoot: function() {
+ return this.absHref === d.rootHref;
+ },
+ isEmpty: function() {
+ return 0 === i(this.content).length;
+ },
+ fetchContent: function() {
+ return k(this.absHref);
+ },
+ getCrumb: function() {
+ for (var e = this, t = [e]; e.parent;)(e = e.parent), t.unshift(e);
+ return t;
+ },
+ getSubfolders: function() {
+ return s(
+ a(this.content, function(e) {
+ return e.isFolder();
+ }),
+ function(e) {
+ return e.label.toLowerCase();
+ }
+ );
+ },
+ getStats: function() {
+ var e = 0,
+ t = 0;
+ o(this.content, function(n) {
+ n.isFolder() ? (e += 1) : (t += 1);
+ });
+ for (var n = 0, r = this; r.parent;)(n += 1), (r = r.parent);
+ return { folders: e, files: t, depth: n };
+ },
+ }),
+ (e.exports = { get: y, remove: x });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.map,
+ a = n(7),
+ s = /\/$/,
+ c = {},
+ u = function(e) {
+ return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g, "\\$&");
+ },
+ l = function(e) {
+ i(e, function(e, t) {
+ var n =
+ "^(" +
+ o(e, function(e) {
+ return "(" + u(e).replace(/\*/g, ".*") + ")";
+ }).join("|") +
+ ")$";
+ c[t] = new RegExp(n, "i");
+ });
+ },
+ f = function(e) {
+ if (s.test(e)) return "folder";
+ var t = e.lastIndexOf("/"),
+ n = t >= 0 ? e.substr(t + 1) : e,
+ r = void 0;
+ return (
+ i(c, function(e, t) {
+ c[t].test(n) && (r = t);
+ }),
+ r ? r : "file"
+ );
+ };
+ l(Object.assign({}, a.types)), (e.exports = { getType: f });
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(12),
+ r = n(20),
+ i = n(14),
+ o = e.window,
+ a = Object.assign({ enabled: !1, interval: 5e3 }, i.autorefresh),
+ s = null,
+ c = function() {
+ r.refresh();
+ },
+ u = function() {
+ o.clearTimeout(s);
+ },
+ l = function() {
+ o.clearTimeout(s), (s = o.setTimeout(c, a.interval));
+ },
+ f = function() {
+ a.enabled &&
+ ((a.interval = Math.max(1e3, a.interval)),
+ t.sub("location.beforeChange", u),
+ t.sub("location.beforeRefresh", u),
+ t.sub("location.changed", l),
+ t.sub("location.refreshed", l));
+ };
+ f();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(13),
+ s = n(14),
+ c = Object.assign({ enabled: !1 }, s.contextmenu),
+ u = '<div id="cm-overlay"></div>',
+ l = '<div class="cm-panel"><ul></ul></div>',
+ f = '<li class="cm-sep"></li>',
+ d =
+ '<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',
+ p = '<li class="cm-label"><span class="cm-text"></span></li>',
+ h = function(e) {
+ for (; !e._cmId && e.parentNode;) e = e.parentNode;
+ return e._cmId;
+ },
+ g = function(e) {
+ var t = o(u),
+ n = function(n) {
+ n.stopPropagation(), n.preventDefault();
+ var r = h(n.target);
+ (n.target !== t[0] && void 0 === r) || (t.rm(), e(r));
+ };
+ return t.on("contextmenu", n).on("click", n);
+ },
+ m = function(e) {
+ var t = o(l),
+ n = t.find("ul"),
+ r = void 0;
+ return (
+ i(e, function(e) {
+ "-" === e.type ?
+ o(f).appTo(n) :
+ "l" === e.type ?
+ o(p).appTo(n).find(".cm-text").text(e.text) :
+ "e" === e.type &&
+ ((r = o(d).appTo(n)),
+ (r[0]._cmId = e.id),
+ r.find(".cm-text").text(e.text),
+ e.icon ?
+ r.find(".cm-icon img").attr("src", a.icon(e.icon)) :
+ r.find(".cm-icon").addCls("no-icon"));
+ }),
+ t
+ );
+ },
+ v = function(e, t, n, r) {
+ var i = 4;
+ t.css({ left: 0, top: 0, opacity: 0 }), e.show();
+ var o = e[0].getBoundingClientRect(),
+ a = t[0].getBoundingClientRect(),
+ s = o.left,
+ c = o.top,
+ u = o.width,
+ l = o.height,
+ f = a.width,
+ d = a.height,
+ p = n,
+ h = r;
+ f > u - 2 * i && ((p = i), (f = u - 2 * i)),
+ d > l - 2 * i && ((h = i), (d = l - 2 * i)),
+ p < s + i && (p = s + i),
+ p + f > s + u - i && (p = s + u - i - f),
+ h < c + i && (h = c + i),
+ h + d > c + l - i && (h = c + l - i - d),
+ t.css({
+ left: p + "px",
+ top: h + "px",
+ width: f + "px",
+ height: d + "px",
+ opacity: 1,
+ });
+ },
+ b = function(e, t, n, r) {
+ var i = g(r),
+ o = m(n);
+ i.hide().app(o).appTo("body"), v(i, o, e, t);
+ },
+ w = function() {
+ if (c.enabled) {
+ var e = [
+ { type: "e", id: "e1", text: "testing context menus" },
+ { type: "e", id: "e2", text: "another entry" },
+ { type: "e", id: "e3", text: "one with icon", icon: "folder" },
+ { type: "-" },
+ { type: "e", id: "e4", text: "one with icon", icon: "x" },
+ { type: "e", id: "e5", text: "one with icon", icon: "img" },
+ ];
+ o("#view").on("contextmenu", function(t) {
+ t.preventDefault(), b(t.pageX, t.pageY, e);
+ });
+ }
+ };
+ w();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(12),
+ s = n(20),
+ c = n(13),
+ u = n(14),
+ l = n(17),
+ f = Object.assign({ enabled: !1 }, u.crumb),
+ d = '<div id="crumbbar"></div>',
+ p =
+ '<a class="crumb">\n <img class="sep" src="' +
+ c.image("crumb") +
+ '" alt=">"/>\n <span class="label"></span>\n </a>',
+ h =
+ '<img class="hint" src="' +
+ c.icon("folder-page") +
+ '" alt="has index page"/>',
+ g = function(e) {
+ var t = o(p);
+ return (
+ s.setLink(t, e),
+ t.find(".label").text(e.label),
+ e.isCurrentFolder() && t.addCls("active"),
+ e.isManaged || t.app(o(h)),
+ (e._$crumb = t),
+ (t[0]._item = e),
+ t
+ );
+ },
+ m = function(e) {
+ var t = e._$crumb,
+ n = o("#crumbbar");
+ t && t.parent()[0] === n[0] ?
+ (n.children().rmCls("active"), t.addCls("active")) :
+ (n.clr(),
+ i(e.getCrumb(), function(e) {
+ n.app(g(e));
+ }));
+ },
+ v = function() {
+ f.enabled && (o(d).appTo(l.$flowbar), a.sub("location.changed", m));
+ };
+ v();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(28),
+ i = n(2),
+ o = i.each,
+ a = i.dom,
+ s = n(8),
+ c = n(12),
+ u = n(14),
+ l = Object.assign({ enabled: !1 }, u.custom),
+ f = function(e, t) {
+ var n = a("#content-" + t);
+ if (e && e[t].content) {
+ var i = e[t].content;
+ "md" === e[t].type && (i = r(i)), n.html(i).show();
+ } else n.hide();
+ },
+ d = function(e) {
+ s.request({ action: "get", custom: e.absHref }).then(function(e) {
+ var t = e && e.custom;
+ o(["header", "footer"], function(e) {
+ return f(t, e);
+ });
+ });
+ },
+ p = function() {
+ l.enabled &&
+ (a('<div id="content-header"></div>').hide().preTo("#content"),
+ a('<div id="content-footer"></div>').hide().appTo("#content"),
+ c.sub("location.changed", d));
+ };
+ p();
+ },
+ function(e, t, n) {
+ (function(t) {
+ !(function(t) {
+ "use strict";
+
+ function n(e) {
+ (this.tokens = []),
+ (this.tokens.links = Object.create(null)),
+ (this.options = e || b.defaults),
+ (this.rules = w.normal),
+ this.options.pedantic ?
+ (this.rules = w.pedantic) :
+ this.options.gfm &&
+ (this.options.tables ?
+ (this.rules = w.tables) :
+ (this.rules = w.gfm));
+ }
+
+ function r(e, t) {
+ if (
+ ((this.options = t || b.defaults),
+ (this.links = e),
+ (this.rules = y.normal),
+ (this.renderer = this.options.renderer || new i()),
+ (this.renderer.options = this.options), !this.links)
+ )
+ throw new Error("Tokens array requires a `links` property.");
+ this.options.pedantic ?
+ (this.rules = y.pedantic) :
+ this.options.gfm &&
+ (this.options.breaks ?
+ (this.rules = y.breaks) :
+ (this.rules = y.gfm));
+ }
+
+ function i(e) {
+ this.options = e || b.defaults;
+ }
+
+ function o() {}
+
+ function a(e) {
+ (this.tokens = []),
+ (this.token = null),
+ (this.options = e || b.defaults),
+ (this.options.renderer = this.options.renderer || new i()),
+ (this.renderer = this.options.renderer),
+ (this.renderer.options = this.options),
+ (this.slugger = new s());
+ }
+
+ function s() {
+ this.seen = {};
+ }
+
+ function c(e, t) {
+ if (t) {
+ if (c.escapeTest.test(e))
+ return e.replace(c.escapeReplace, function(e) {
+ return c.replacements[e];
+ });
+ } else if (c.escapeTestNoEncode.test(e))
+ return e.replace(c.escapeReplaceNoEncode, function(e) {
+ return c.replacements[e];
+ });
+ return e;
+ }
+
+ function u(e) {
+ return e.replace(
+ /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,
+ function(e, t) {
+ return (
+ (t = t.toLowerCase()),
+ "colon" === t ?
+ ":" :
+ "#" === t.charAt(0) ?
+ "x" === t.charAt(1) ?
+ String.fromCharCode(parseInt(t.substring(2), 16)) :
+ String.fromCharCode(+t.substring(1)) :
+ ""
+ );
+ }
+ );
+ }
+
+ function l(e, t) {
+ return (
+ (e = e.source || e),
+ (t = t || ""), {
+ replace: function(t, n) {
+ return (
+ (n = n.source || n),
+ (n = n.replace(/(^|[^\[])\^/g, "$1")),
+ (e = e.replace(t, n)),
+ this
+ );
+ },
+ getRegex: function() {
+ return new RegExp(e, t);
+ },
+ }
+ );
+ }
+
+ function f(e, t, n) {
+ if (e) {
+ try {
+ var r = decodeURIComponent(u(n))
+ .replace(/[^\w:]/g, "")
+ .toLowerCase();
+ } catch (e) {
+ return null;
+ }
+ if (
+ 0 === r.indexOf("javascript:") ||
+ 0 === r.indexOf("vbscript:") ||
+ 0 === r.indexOf("data:")
+ )
+ return null;
+ }
+ t && !k.test(n) && (n = d(t, n));
+ try {
+ n = encodeURI(n).replace(/%25/g, "%");
+ } catch (e) {
+ return null;
+ }
+ return n;
+ }
+
+ function d(e, t) {
+ return (
+ x[" " + e] ||
+ (/^[^:]+:\/*[^\/]*$/.test(e) ?
+ (x[" " + e] = e + "/") :
+ (x[" " + e] = m(e, "/", !0))),
+ (e = x[" " + e]),
+ "//" === t.slice(0, 2) ?
+ e.replace(/:[\s\S]*/, ":") + t :
+ "/" === t.charAt(0) ?
+ e.replace(/(:\/*[^\/]*)[\s\S]*/, "$1") + t :
+ e + t
+ );
+ }
+
+ function p() {}
+
+ function h(e) {
+ for (var t, n, r = 1; r < arguments.length; r++) {
+ t = arguments[r];
+ for (n in t)
+ Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
+ }
+ return e;
+ }
+
+ function g(e, t) {
+ var n = e.replace(/\|/g, function(e, t, n) {
+ for (var r = !1, i = t; --i >= 0 && "\\" === n[i];) r = !r;
+ return r ? "|" : " |";
+ }),
+ r = n.split(/ \|/),
+ i = 0;
+ if (r.length > t) r.splice(t);
+ else
+ for (; r.length < t;) r.push("");
+ for (; i < r.length; i++) r[i] = r[i].trim().replace(/\\\|/g, "|");
+ return r;
+ }
+
+ function m(e, t, n) {
+ if (0 === e.length) return "";
+ for (var r = 0; r < e.length;) {
+ var i = e.charAt(e.length - r - 1);
+ if (i !== t || n) {
+ if (i === t || !n) break;
+ r++;
+ } else r++;
+ }
+ return e.substr(0, e.length - r);
+ }
+
+ function v(e, t) {
+ if (e.indexOf(t[1]) === -1) return -1;
+ for (var n = 0, r = 0; r < e.length; r++)
+ if ("\\" === e[r]) r++;
+ else if (e[r] === t[0]) n++;
+ else if (e[r] === t[1] && (n--, n < 0)) return r;
+ return -1;
+ }
+
+ function b(e, t, r) {
+ if ("undefined" == typeof e || null === e)
+ throw new Error("marked(): input parameter is undefined or null");
+ if ("string" != typeof e)
+ throw new Error(
+ "marked(): input parameter is of type " +
+ Object.prototype.toString.call(e) +
+ ", string expected"
+ );
+ if (r || "function" == typeof t) {
+ r || ((r = t), (t = null)), (t = h({}, b.defaults, t || {}));
+ var i,
+ o,
+ s = t.highlight,
+ u = 0;
+ try {
+ i = n.lex(e, t);
+ } catch (e) {
+ return r(e);
+ }
+ o = i.length;
+ var l = function(e) {
+ if (e) return (t.highlight = s), r(e);
+ var n;
+ try {
+ n = a.parse(i, t);
+ } catch (t) {
+ e = t;
+ }
+ return (t.highlight = s), e ? r(e) : r(null, n);
+ };
+ if (!s || s.length < 3) return l();
+ if ((delete t.highlight, !o)) return l();
+ for (; u < i.length; u++)
+ !(function(e) {
+ return "code" !== e.type ?
+ --o || l() :
+ s(e.text, e.lang, function(t, n) {
+ return t ?
+ l(t) :
+ null == n || n === e.text ?
+ --o || l() :
+ ((e.text = n), (e.escaped = !0), void(--o || l()));
+ });
+ })(i[u]);
+ } else
+ try {
+ return t && (t = h({}, b.defaults, t)), a.parse(n.lex(e, t), t);
+ } catch (e) {
+ if (
+ ((e.message +=
+ "\nPlease report this to https://github.com/markedjs/marked."),
+ (t || b.defaults).silent)
+ )
+ return (
+ "<p>An error occurred:</p><pre>" +
+ c(e.message + "", !0) +
+ "</pre>"
+ );
+ throw e;
+ }
+ }
+ var w = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: p,
+ hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+ nptable: p,
+ blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+ list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: "^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",
+ def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+ table: p,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+ text: /^[^\n]+/,
+ };
+ (w._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/),
+ (w._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/),
+ (w.def = l(w.def)
+ .replace("label", w._label)
+ .replace("title", w._title)
+ .getRegex()),
+ (w.bullet = /(?:[*+-]|\d{1,9}\.)/),
+ (w.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/),
+ (w.item = l(w.item, "gm").replace(/bull/g, w.bullet).getRegex()),
+ (w.list = l(w.list)
+ .replace(/bull/g, w.bullet)
+ .replace(
+ "hr",
+ "\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))"
+ )
+ .replace("def", "\\n+(?=" + w.def.source + ")")
+ .getRegex()),
+ (w._tag =
+ "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul"),
+ (w._comment = /<!--(?!-?>)[\s\S]*?-->/),
+ (w.html = l(w.html, "i")
+ .replace("comment", w._comment)
+ .replace("tag", w._tag)
+ .replace(
+ "attribute",
+ / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/
+ )
+ .getRegex()),
+ (w.paragraph = l(w.paragraph)
+ .replace("hr", w.hr)
+ .replace("heading", w.heading)
+ .replace("lheading", w.lheading)
+ .replace("tag", w._tag)
+ .getRegex()),
+ (w.blockquote = l(w.blockquote)
+ .replace("paragraph", w.paragraph)
+ .getRegex()),
+ (w.normal = h({}, w)),
+ (w.gfm = h({}, w.normal, {
+ fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
+ paragraph: /^/,
+ heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/,
+ })),
+ (w.gfm.paragraph = l(w.paragraph)
+ .replace(
+ "(?!",
+ "(?!" +
+ w.gfm.fences.source.replace("\\1", "\\2") +
+ "|" +
+ w.list.source.replace("\\1", "\\3") +
+ "|"
+ )
+ .getRegex()),
+ (w.tables = h({}, w.gfm, {
+ nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+ table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/,
+ })),
+ (w.pedantic = h({}, w.normal, {
+ html: l(
+ "^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))"
+ )
+ .replace("comment", w._comment)
+ .replace(
+ /tag/g,
+ "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b"
+ )
+ .getRegex(),
+ def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
+ })),
+ (n.rules = w),
+ (n.lex = function(e, t) {
+ var r = new n(t);
+ return r.lex(e);
+ }),
+ (n.prototype.lex = function(e) {
+ return (
+ (e = e
+ .replace(/\r\n|\r/g, "\n")
+ .replace(/\t/g, " ")
+ .replace(/\u00a0/g, " ")
+ .replace(/\u2424/g, "\n")),
+ this.token(e, !0)
+ );
+ }),
+ (n.prototype.token = function(e, t) {
+ e = e.replace(/^ +$/gm, "");
+ for (var n, r, i, o, a, s, c, u, l, f, d, p, h, v, b, y; e;)
+ if (
+ ((i = this.rules.newline.exec(e)) &&
+ ((e = e.substring(i[0].length)),
+ i[0].length > 1 && this.tokens.push({ type: "space" })),
+ (i = this.rules.code.exec(e)))
+ )
+ (e = e.substring(i[0].length)),
+ (i = i[0].replace(/^ {4}/gm, "")),
+ this.tokens.push({
+ type: "code",
+ text: this.options.pedantic ? i : m(i, "\n"),
+ });
+ else if ((i = this.rules.fences.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "code",
+ lang: i[2] ? i[2].trim() : i[2],
+ text: i[3] || "",
+ });
+ else if ((i = this.rules.heading.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "heading",
+ depth: i[1].length,
+ text: i[2],
+ });
+ else if (
+ t &&
+ (i = this.rules.nptable.exec(e)) &&
+ ((s = {
+ type: "table",
+ header: g(i[1].replace(/^ *| *\| *$/g, "")),
+ align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
+ cells: i[3] ? i[3].replace(/\n$/, "").split("\n") : [],
+ }),
+ s.header.length === s.align.length)
+ ) {
+ for (
+ e = e.substring(i[0].length), d = 0; d < s.align.length; d++
+ )
+ /^ *-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "right") :
+ /^ *:-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "center") :
+ /^ *:-+ *$/.test(s.align[d]) ?
+ (s.align[d] = "left") :
+ (s.align[d] = null);
+ for (d = 0; d < s.cells.length; d++)
+ s.cells[d] = g(s.cells[d], s.header.length);
+ this.tokens.push(s);
+ } else if ((i = this.rules.hr.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({ type: "hr" });
+ else if ((i = this.rules.blockquote.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({ type: "blockquote_start" }),
+ (i = i[0].replace(/^ *> ?/gm, "")),
+ this.token(i, t),
+ this.tokens.push({ type: "blockquote_end" });
+ else if ((i = this.rules.list.exec(e))) {
+ for (
+ e = e.substring(i[0].length),
+ o = i[2],
+ v = o.length > 1,
+ c = {
+ type: "list_start",
+ ordered: v,
+ start: v ? +o : "",
+ loose: !1,
+ },
+ this.tokens.push(c),
+ i = i[0].match(this.rules.item),
+ u = [],
+ n = !1,
+ h = i.length,
+ d = 0; d < h; d++
+ )
+ (s = i[d]),
+ (f = s.length),
+ (s = s.replace(/^ *([*+-]|\d+\.) */, "")), ~s.indexOf("\n ") &&
+ ((f -= s.length),
+ (s = this.options.pedantic ?
+ s.replace(/^ {1,4}/gm, "") :
+ s.replace(
+ new RegExp("^ {1," + f + "}", "gm"),
+ ""
+ ))),
+ d !== h - 1 &&
+ ((a = w.bullet.exec(i[d + 1])[0]),
+ (o.length > 1 ?
+ 1 === a.length :
+ a.length > 1 ||
+ (this.options.smartLists && a !== o)) &&
+ ((e = i.slice(d + 1).join("\n") + e), (d = h - 1))),
+ (r = n || /\n\n(?!\s*$)/.test(s)),
+ d !== h - 1 &&
+ ((n = "\n" === s.charAt(s.length - 1)), r || (r = n)),
+ r && (c.loose = !0),
+ (b = /^\[[ xX]\] /.test(s)),
+ (y = void 0),
+ b &&
+ ((y = " " !== s[1]),
+ (s = s.replace(/^\[[ xX]\] +/, ""))),
+ (l = {
+ type: "list_item_start",
+ task: b,
+ checked: y,
+ loose: r,
+ }),
+ u.push(l),
+ this.tokens.push(l),
+ this.token(s, !1),
+ this.tokens.push({ type: "list_item_end" });
+ if (c.loose)
+ for (h = u.length, d = 0; d < h; d++) u[d].loose = !0;
+ this.tokens.push({ type: "list_end" });
+ } else if ((i = this.rules.html.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: this.options.sanitize ? "paragraph" : "html",
+ pre:
+ !this.options.sanitizer &&
+ ("pre" === i[1] ||
+ "script" === i[1] ||
+ "style" === i[1]),
+ text: i[0],
+ });
+ else if (t && (i = this.rules.def.exec(e)))
+ (e = e.substring(i[0].length)),
+ i[3] && (i[3] = i[3].substring(1, i[3].length - 1)),
+ (p = i[1].toLowerCase().replace(/\s+/g, " ")),
+ this.tokens.links[p] ||
+ (this.tokens.links[p] = { href: i[2], title: i[3] });
+ else if (
+ t &&
+ (i = this.rules.table.exec(e)) &&
+ ((s = {
+ type: "table",
+ header: g(i[1].replace(/^ *| *\| *$/g, "")),
+ align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
+ cells: i[3] ?
+ i[3].replace(/(?: *\| *)?\n$/, "").split("\n") :
+ [],
+ }),
+ s.header.length === s.align.length)
+ ) {
+ for (
+ e = e.substring(i[0].length), d = 0; d < s.align.length; d++
+ )
+ /^ *-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "right") :
+ /^ *:-+: *$/.test(s.align[d]) ?
+ (s.align[d] = "center") :
+ /^ *:-+ *$/.test(s.align[d]) ?
+ (s.align[d] = "left") :
+ (s.align[d] = null);
+ for (d = 0; d < s.cells.length; d++)
+ s.cells[d] = g(
+ s.cells[d].replace(/^ *\| *| *\| *$/g, ""),
+ s.header.length
+ );
+ this.tokens.push(s);
+ } else if ((i = this.rules.lheading.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "heading",
+ depth: "=" === i[2] ? 1 : 2,
+ text: i[1],
+ });
+ else if (t && (i = this.rules.paragraph.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({
+ type: "paragraph",
+ text: "\n" === i[1].charAt(i[1].length - 1) ?
+ i[1].slice(0, -1) :
+ i[1],
+ });
+ else if ((i = this.rules.text.exec(e)))
+ (e = e.substring(i[0].length)),
+ this.tokens.push({ type: "text", text: i[0] });
+ else if (e)
+ throw new Error("Infinite loop on byte: " + e.charCodeAt(0));
+ return this.tokens;
+ });
+ var y = {
+ escape: /^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,
+ autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+ url: p,
+ tag: "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",
+ link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+ reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+ nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+ strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
+ em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
+ code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
+ br: /^( {2,}|\\)\n(?!\s*$)/,
+ del: p,
+ text: /^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/,
+ };
+ (y._punctuation = "!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~"),
+ (y.em = l(y.em)
+ .replace(/punctuation/g, y._punctuation)
+ .getRegex()),
+ (y._escapes = /\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g),
+ (y._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/),
+ (y._email = /[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/),
+ (y.autolink = l(y.autolink)
+ .replace("scheme", y._scheme)
+ .replace("email", y._email)
+ .getRegex()),
+ (y._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/),
+ (y.tag = l(y.tag)
+ .replace("comment", w._comment)
+ .replace("attribute", y._attribute)
+ .getRegex()),
+ (y._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/),
+ (y._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/),
+ (y._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/),
+ (y.link = l(y.link)
+ .replace("label", y._label)
+ .replace("href", y._href)
+ .replace("title", y._title)
+ .getRegex()),
+ (y.reflink = l(y.reflink).replace("label", y._label).getRegex()),
+ (y.normal = h({}, y)),
+ (y.pedantic = h({}, y.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+ link: l(/^!?\[(label)\]\((.*?)\)/)
+ .replace("label", y._label)
+ .getRegex(),
+ reflink: l(/^!?\[(label)\]\s*\[([^\]]*)\]/)
+ .replace("label", y._label)
+ .getRegex(),
+ })),
+ (y.gfm = h({}, y.normal, {
+ escape: l(y.escape).replace("])", "~|])").getRegex(),
+ _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
+ url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
+ _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+ del: /^~+(?=\S)([\s\S]*?\S)~+/,
+ text: l(y.text)
+ .replace("]|", "~]|")
+ .replace(
+ "|$",
+ "|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$"
+ )
+ .getRegex(),
+ })),
+ (y.gfm.url = l(y.gfm.url, "i")
+ .replace("email", y.gfm._extended_email)
+ .getRegex()),
+ (y.breaks = h({}, y.gfm, {
+ br: l(y.br).replace("{2,}", "*").getRegex(),
+ text: l(y.gfm.text).replace("{2,}", "*").getRegex(),
+ })),
+ (r.rules = y),
+ (r.output = function(e, t, n) {
+ var i = new r(t, n);
+ return i.output(e);
+ }),
+ (r.prototype.output = function(e) {
+ for (var t, n, i, o, a, s, u = ""; e;)
+ if ((a = this.rules.escape.exec(e)))
+ (e = e.substring(a[0].length)), (u += c(a[1]));
+ else if ((a = this.rules.tag.exec(e)))
+ !this.inLink && /^<a /i.test(a[0]) ?
+ (this.inLink = !0) :
+ this.inLink && /^<\/a>/i.test(a[0]) && (this.inLink = !1), !this.inRawBlock &&
+ /^<(pre|code|kbd|script)(\s|>)/i.test(a[0]) ?
+ (this.inRawBlock = !0) :
+ this.inRawBlock &&
+ /^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0]) &&
+ (this.inRawBlock = !1),
+ (e = e.substring(a[0].length)),
+ (u += this.options.sanitize ?
+ this.options.sanitizer ?
+ this.options.sanitizer(a[0]) :
+ c(a[0]) :
+ a[0]);
+ else if ((a = this.rules.link.exec(e))) {
+ var l = v(a[2], "()");
+ if (l > -1) {
+ var f = a[2].length - l;
+ (a[2] = a[2].substring(0, l)),
+ (a[0] = a[0].substring(0, a[0].length - f));
+ }
+ (e = e.substring(a[0].length)),
+ (this.inLink = !0),
+ (i = a[2]),
+ this.options.pedantic ?
+ ((t = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i)),
+ t ? ((i = t[1]), (o = t[3])) : (o = "")) :
+ (o = a[3] ? a[3].slice(1, -1) : ""),
+ (i = i.trim().replace(/^<([\s\S]*)>$/, "$1")),
+ (u += this.outputLink(a, {
+ href: r.escapes(i),
+ title: r.escapes(o),
+ })),
+ (this.inLink = !1);
+ } else if (
+ (a = this.rules.reflink.exec(e)) ||
+ (a = this.rules.nolink.exec(e))
+ ) {
+ if (
+ ((e = e.substring(a[0].length)),
+ (t = (a[2] || a[1]).replace(/\s+/g, " ")),
+ (t = this.links[t.toLowerCase()]), !t || !t.href)
+ ) {
+ (u += a[0].charAt(0)), (e = a[0].substring(1) + e);
+ continue;
+ }
+ (this.inLink = !0),
+ (u += this.outputLink(a, t)),
+ (this.inLink = !1);
+ } else if ((a = this.rules.strong.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.strong(
+ this.output(a[4] || a[3] || a[2] || a[1])
+ ));
+ else if ((a = this.rules.em.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.em(
+ this.output(a[6] || a[5] || a[4] || a[3] || a[2] || a[1])
+ ));
+ else if ((a = this.rules.code.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.codespan(c(a[2].trim(), !0)));
+ else if ((a = this.rules.br.exec(e)))
+ (e = e.substring(a[0].length)), (u += this.renderer.br());
+ else if ((a = this.rules.del.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.del(this.output(a[1])));
+ else if ((a = this.rules.autolink.exec(e)))
+ (e = e.substring(a[0].length)),
+ "@" === a[2] ?
+ ((n = c(this.mangle(a[1]))), (i = "mailto:" + n)) :
+ ((n = c(a[1])), (i = n)),
+ (u += this.renderer.link(i, null, n));
+ else if (this.inLink || !(a = this.rules.url.exec(e))) {
+ if ((a = this.rules.text.exec(e)))
+ (e = e.substring(a[0].length)),
+ (u += this.inRawBlock ?
+ this.renderer.text(a[0]) :
+ this.renderer.text(c(this.smartypants(a[0]))));
+ else if (e)
+ throw new Error(
+ "Infinite loop on byte: " + e.charCodeAt(0)
+ );
+ } else {
+ if ("@" === a[2])(n = c(a[0])), (i = "mailto:" + n);
+ else {
+ do(s = a[0]), (a[0] = this.rules._backpedal.exec(a[0])[0]);
+ while (s !== a[0]);
+ (n = c(a[0])), (i = "www." === a[1] ? "http://" + n : n);
+ }
+ (e = e.substring(a[0].length)),
+ (u += this.renderer.link(i, null, n));
+ }
+ return u;
+ }),
+ (r.escapes = function(e) {
+ return e ? e.replace(r.rules._escapes, "$1") : e;
+ }),
+ (r.prototype.outputLink = function(e, t) {
+ var n = t.href,
+ r = t.title ? c(t.title) : null;
+ return "!" !== e[0].charAt(0) ?
+ this.renderer.link(n, r, this.output(e[1])) :
+ this.renderer.image(n, r, c(e[1]));
+ }),
+ (r.prototype.smartypants = function(e) {
+ return this.options.smartypants ?
+ e
+ .replace(/---/g, "—")
+ .replace(/--/g, "–")
+ .replace(/(^|[-\u2014\/(\[{"\s])'/g, "$1‘")
+ .replace(/'/g, "’")
+ .replace(/(^|[-\u2014\/(\[{\u2018\s])"/g, "$1“")
+ .replace(/"/g, "”")
+ .replace(/\.{3}/g, "…") :
+ e;
+ }),
+ (r.prototype.mangle = function(e) {
+ if (!this.options.mangle) return e;
+ for (var t, n = "", r = e.length, i = 0; i < r; i++)
+ (t = e.charCodeAt(i)),
+ Math.random() > 0.5 && (t = "x" + t.toString(16)),
+ (n += "&#" + t + ";");
+ return n;
+ }),
+ (i.prototype.code = function(e, t, n) {
+ var r = (t || "").match(/\S*/)[0];
+ if (this.options.highlight) {
+ var i = this.options.highlight(e, r);
+ null != i && i !== e && ((n = !0), (e = i));
+ }
+ return r ?
+ '<pre><code class="' +
+ this.options.langPrefix +
+ c(r, !0) +
+ '">' +
+ (n ? e : c(e, !0)) +
+ "</code></pre>\n" :
+ "<pre><code>" + (n ? e : c(e, !0)) + "</code></pre>";
+ }),
+ (i.prototype.blockquote = function(e) {
+ return "<blockquote>\n" + e + "</blockquote>\n";
+ }),
+ (i.prototype.html = function(e) {
+ return e;
+ }),
+ (i.prototype.heading = function(e, t, n, r) {
+ return this.options.headerIds ?
+ "<h" +
+ t +
+ ' id="' +
+ this.options.headerPrefix +
+ r.slug(n) +
+ '">' +
+ e +
+ "</h" +
+ t +
+ ">\n" :
+ "<h" + t + ">" + e + "</h" + t + ">\n";
+ }),
+ (i.prototype.hr = function() {
+ return this.options.xhtml ? "<hr/>\n" : "<hr>\n";
+ }),
+ (i.prototype.list = function(e, t, n) {
+ var r = t ? "ol" : "ul",
+ i = t && 1 !== n ? ' start="' + n + '"' : "";
+ return "<" + r + i + ">\n" + e + "</" + r + ">\n";
+ }),
+ (i.prototype.listitem = function(e) {
+ return "<li>" + e + "</li>\n";
+ }),
+ (i.prototype.checkbox = function(e) {
+ return (
+ "<input " +
+ (e ? 'checked="" ' : "") +
+ 'disabled="" type="checkbox"' +
+ (this.options.xhtml ? " /" : "") +
+ "> "
+ );
+ }),
+ (i.prototype.paragraph = function(e) {
+ return "<p>" + e + "</p>\n";
+ }),
+ (i.prototype.table = function(e, t) {
+ return (
+ t && (t = "<tbody>" + t + "</tbody>"),
+ "<table>\n<thead>\n" + e + "</thead>\n" + t + "</table>\n"
+ );
+ }),
+ (i.prototype.tablerow = function(e) {
+ return "<tr>\n" + e + "</tr>\n";
+ }),
+ (i.prototype.tablecell = function(e, t) {
+ var n = t.header ? "th" : "td",
+ r = t.align ?
+ "<" + n + ' align="' + t.align + '">' :
+ "<" + n + ">";
+ return r + e + "</" + n + ">\n";
+ }),
+ (i.prototype.strong = function(e) {
+ return "<strong>" + e + "</strong>";
+ }),
+ (i.prototype.em = function(e) {
+ return "<em>" + e + "</em>";
+ }),
+ (i.prototype.codespan = function(e) {
+ return "<code>" + e + "</code>";
+ }),
+ (i.prototype.br = function() {
+ return this.options.xhtml ? "<br/>" : "<br>";
+ }),
+ (i.prototype.del = function(e) {
+ return "<del>" + e + "</del>";
+ }),
+ (i.prototype.link = function(e, t, n) {
+ if (
+ ((e = f(this.options.sanitize, this.options.baseUrl, e)),
+ null === e)
+ )
+ return n;
+ var r = '<a href="' + c(e) + '"';
+ return t && (r += ' title="' + t + '"'), (r += ">" + n + "</a>");
+ }),
+ (i.prototype.image = function(e, t, n) {
+ if (
+ ((e = f(this.options.sanitize, this.options.baseUrl, e)),
+ null === e)
+ )
+ return n;
+ var r = '<img src="' + e + '" alt="' + n + '"';
+ return (
+ t && (r += ' title="' + t + '"'),
+ (r += this.options.xhtml ? "/>" : ">")
+ );
+ }),
+ (i.prototype.text = function(e) {
+ return e;
+ }),
+ (o.prototype.strong = o.prototype.em = o.prototype.codespan = o.prototype.del = o.prototype.text = function(
+ e
+ ) {
+ return e;
+ }),
+ (o.prototype.link = o.prototype.image = function(e, t, n) {
+ return "" + n;
+ }),
+ (o.prototype.br = function() {
+ return "";
+ }),
+ (a.parse = function(e, t) {
+ var n = new a(t);
+ return n.parse(e);
+ }),
+ (a.prototype.parse = function(e) {
+ (this.inline = new r(e.links, this.options)),
+ (this.inlineText = new r(
+ e.links,
+ h({}, this.options, { renderer: new o() })
+ )),
+ (this.tokens = e.reverse());
+ for (var t = ""; this.next();) t += this.tok();
+ return t;
+ }),
+ (a.prototype.next = function() {
+ return (this.token = this.tokens.pop());
+ }),
+ (a.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0;
+ }),
+ (a.prototype.parseText = function() {
+ for (var e = this.token.text;
+ "text" === this.peek().type;)
+ e += "\n" + this.next().text;
+ return this.inline.output(e);
+ }),
+ (a.prototype.tok = function() {
+ switch (this.token.type) {
+ case "space":
+ return "";
+ case "hr":
+ return this.renderer.hr();
+ case "heading":
+ return this.renderer.heading(
+ this.inline.output(this.token.text),
+ this.token.depth,
+ u(this.inlineText.output(this.token.text)),
+ this.slugger
+ );
+ case "code":
+ return this.renderer.code(
+ this.token.text,
+ this.token.lang,
+ this.token.escaped
+ );
+ case "table":
+ var e,
+ t,
+ n,
+ r,
+ i = "",
+ o = "";
+ for (n = "", e = 0; e < this.token.header.length; e++)
+ n += this.renderer.tablecell(
+ this.inline.output(this.token.header[e]), { header: !0, align: this.token.align[e] }
+ );
+ for (
+ i += this.renderer.tablerow(n), e = 0; e < this.token.cells.length; e++
+ ) {
+ for (
+ t = this.token.cells[e], n = "", r = 0; r < t.length; r++
+ )
+ n += this.renderer.tablecell(this.inline.output(t[r]), {
+ header: !1,
+ align: this.token.align[r],
+ });
+ o += this.renderer.tablerow(n);
+ }
+ return this.renderer.table(i, o);
+ case "blockquote_start":
+ for (o = "";
+ "blockquote_end" !== this.next().type;)
+ o += this.tok();
+ return this.renderer.blockquote(o);
+ case "list_start":
+ o = "";
+ for (
+ var a = this.token.ordered, s = this.token.start;
+ "list_end" !== this.next().type;
+
+ )
+ o += this.tok();
+ return this.renderer.list(o, a, s);
+ case "list_item_start":
+ o = "";
+ var c = this.token.loose;
+ for (
+ this.token.task &&
+ (o += this.renderer.checkbox(this.token.checked));
+ "list_item_end" !== this.next().type;
+
+ )
+ o +=
+ c || "text" !== this.token.type ?
+ this.tok() :
+ this.parseText();
+ return this.renderer.listitem(o);
+ case "html":
+ return this.renderer.html(this.token.text);
+ case "paragraph":
+ return this.renderer.paragraph(
+ this.inline.output(this.token.text)
+ );
+ case "text":
+ return this.renderer.paragraph(this.parseText());
+ default:
+ var l =
+ 'Token with "' + this.token.type + '" type was not found.';
+ if (!this.options.silent) throw new Error(l);
+ console.log(l);
+ }
+ }),
+ (s.prototype.slug = function(e) {
+ var t = e
+ .toLowerCase()
+ .trim()
+ .replace(
+ /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,
+ ""
+ )
+ .replace(/\s/g, "-");
+ if (this.seen.hasOwnProperty(t)) {
+ var n = t;
+ do this.seen[n]++, (t = n + "-" + this.seen[n]);
+ while (this.seen.hasOwnProperty(t));
+ }
+ return (this.seen[t] = 0), t;
+ }),
+ (c.escapeTest = /[&<>"']/),
+ (c.escapeReplace = /[&<>"']/g),
+ (c.replacements = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ }),
+ (c.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/),
+ (c.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g);
+ var x = {},
+ k = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
+ (p.exec = p),
+ (b.options = b.setOptions = function(e) {
+ return h(b.defaults, e), b;
+ }),
+ (b.getDefaults = function() {
+ return {
+ baseUrl: null,
+ breaks: !1,
+ gfm: !0,
+ headerIds: !0,
+ headerPrefix: "",
+ highlight: null,
+ langPrefix: "language-",
+ mangle: !0,
+ pedantic: !1,
+ renderer: new i(),
+ sanitize: !1,
+ sanitizer: null,
+ silent: !1,
+ smartLists: !1,
+ smartypants: !1,
+ tables: !0,
+ xhtml: !1,
+ };
+ }),
+ (b.defaults = b.getDefaults()),
+ (b.Parser = a),
+ (b.parser = a.parse),
+ (b.Renderer = i),
+ (b.TextRenderer = o),
+ (b.Lexer = n),
+ (b.lexer = n.lex),
+ (b.InlineLexer = r),
+ (b.inlineLexer = r.output),
+ (b.Slugger = s),
+ (b.parse = b),
+ (e.exports = b);
+ })(this || ("undefined" != typeof window ? window : t));
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = n(8),
+ s = n(12),
+ c = n(20),
+ u = n(13),
+ l = n(14),
+ f = Object.assign({
+ enabled: !1,
+ type: "php-tar",
+ packageName: "package",
+ alwaysVisible: !1,
+ },
+ l.download
+ ),
+ d =
+ '<div id="download" class="tool">\n <img src="' +
+ u.image("download") +
+ '" alt="download"/>\n </div>',
+ p = [],
+ h = void 0,
+ g = function(e) {
+ (p = e.slice(0)), p.length ? h.show() : f.alwaysVisible || h.hide();
+ },
+ m = function() {
+ var e = f.type,
+ t = f.packageName,
+ n = "shell-zip" === e ? "zip" : "tar";
+ t || (t = 1 === p.length ? p[0].label : c.getItem().label);
+ var r = {
+ action: "download",
+ as: t + "." + n,
+ type: e,
+ baseHref: c.getAbsHref(),
+ hrefs: "",
+ };
+ i(p, function(e, t) {
+ r["hrefs[" + t + "]"] = e.absHref;
+ }),
+ a.formRequest(r);
+ },
+ v = function() {
+ f.enabled &&
+ ((h = o(d).hide().appTo("#toolbar").on("click", m)),
+ f.alwaysVisible && h.show(),
+ s.sub("selection", g));
+ };
+ v();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.filter,
+ o = r.debounce,
+ a = r.parsePattern,
+ s = r.dom,
+ c = n(12),
+ u = n(20),
+ l = n(13),
+ f = n(14),
+ d = n(18),
+ p = Object.assign({ enabled: !1, advanced: !1, debounceTime: 100, ignorecase: !0 },
+ f.filter
+ ),
+ h =
+ '<div id="filter" class="tool">\n <img src="' +
+ l.image("filter") +
+ '" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',
+ g = !1,
+ m = "",
+ v = void 0,
+ b = void 0,
+ w = function() {
+ var e =
+ arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
+ if (e !== m) {
+ if (((m = e), !e)) return void d.setLocation();
+ v.addCls("pending");
+ var t = new RegExp(e, p.ignorecase ? "i" : ""),
+ n = i(u.getItem().content, function(e) {
+ return t.test(e.label);
+ });
+ v.rmCls("pending"), d.setHint("noMatch"), d.setItems(n);
+ }
+ },
+ y = function() {
+ g
+ ?
+ (v.addCls("active"), b[0].focus(), w(a(b.val(), p.advanced))) :
+ (w(), v.rmCls("active"));
+ },
+ x = function() {
+ (g = !g), y();
+ },
+ k = function() {
+ (g = !1), b.val(""), y();
+ },
+ _ = function() {
+ p.enabled &&
+ ((v = s(h).appTo("#toolbar")),
+ (b = v.find("input")),
+ v.find("img").on("click", x),
+ b.on("keyup", o(y, p.debounceTime)),
+ c.sub("location.changed", k));
+ };
+ _();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.map,
+ i = n(12),
+ o = n(14),
+ a = e.window,
+ s = Object.assign({ enabled: !1, id: "UA-000000-0" },
+ o["google-analytics-ua"]
+ ),
+ c = function() {
+ !(function(e, t, n, r, i, o, a) {
+ (e.GoogleAnalyticsObject = i),
+ (e[i] =
+ e[i] ||
+ function() {
+ (e[i].q = e[i].q || []).push(arguments);
+ }),
+ (e[i].l = 1 * new Date()),
+ (o = t.createElement(n)),
+ (a = t.getElementsByTagName(n)[0]),
+ (o.async = 1),
+ (o.src = r),
+ a.parentNode.insertBefore(o, a);
+ })(
+ window,
+ document,
+ "script",
+ "//www.google-analytics.com/analytics.js",
+ "ga"
+ );
+ },
+ u = function() {
+ s.enabled &&
+ (c(),
+ a.ga("create", s.id, "auto"),
+ i.sub("location.changed", function(e) {
+ var t = a.location;
+ a.ga("send", "pageview", {
+ location: t.protocol + "//" + t.host + e.absHref,
+ title: r(e.getCrumb(), function(e) {
+ return e.label;
+ }).join(" > "),
+ });
+ }));
+ };
+ u();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(33),
+ r = n(2),
+ i = r.isNum,
+ o = r.dom,
+ a = n(12),
+ s = n(19),
+ c = n(13),
+ u = n(14),
+ l = n(16),
+ f = Object.assign({ enabled: !1, show: !1, qrcode: !0, qrColor: "#999" },
+ u.info
+ ),
+ d =
+ '<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',
+ p =
+ '<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="' +
+ c.image("info-toggle") +
+ '" alt="view-info"/>\n </div>\n </div>',
+ h = "ext/info",
+ g = void 0,
+ m = void 0,
+ v = void 0,
+ b = void 0,
+ w = void 0,
+ y = void 0,
+ x = void 0,
+ k = void 0,
+ _ = void 0,
+ C = function() {
+ l.get(h) ?
+ (o("#view-info").addCls("active"), o("#info").show()) :
+ (o("#view-info").rmCls("active"), o("#info").hide());
+ },
+ S = function(n) {
+ var r = n.thumbRational || n.icon,
+ o = !!n.thumbRational;
+ if (
+ ((!n.isCurrentFolder() && r) || (r = c.icon("folder")),
+ g.attr("src", r),
+ o ? g.addCls("thumb") : g.rmCls("thumb"),
+ m.text(n.label),
+ i(n.time) ? v.text(s.formatDate(n.time)) : v.text("."),
+ i(n.size) ? (b.text(s.formatSize(n.size)), b.show()) : b.hide(),
+ n.isContentFetched)
+ ) {
+ var a = n.getStats();
+ y.text(a.folders), x.text(a.files), w.show();
+ } else w.hide();
+ if (f.qrcode) {
+ var u = e.window.location;
+ k.clr().app(
+ t({
+ render: "image",
+ size: 200,
+ fill: f.qrFill,
+ back: f.qrBack,
+ text: u.protocol + "//" + u.host + n.absHref,
+ crisp: !0,
+ quiet: 1,
+ })
+ );
+ }
+ },
+ A = function(e) {
+ S(e);
+ },
+ T = function() {
+ S(_);
+ },
+ E = function(e) {
+ (_ = e), S(_);
+ },
+ M = function() {
+ if (f.enabled) {
+ var e = o(d).hide().appTo("#mainrow");
+ (g = e.find(".icon img")),
+ (m = e.find(".label")),
+ (v = e.find(".time")),
+ (b = e.find(".size")),
+ (w = e.find(".content")),
+ (y = e.find(".folders")),
+ (x = e.find(".files")),
+ (k = e.find(".qrcode")),
+ f.qrcode || k.rm(),
+ o(p)
+ .appTo("#sidebar")
+ .find("#view-info")
+ .on("click", function(e) {
+ l.put(h, !l.get(h)),
+ C(),
+ a.pub("resize"),
+ e.preventDefault();
+ }),
+ "boolean" != typeof l.get(h) && l.put(h, f.show),
+ C(),
+ a.sub("location.changed", E),
+ a.sub("item.mouseenter", A),
+ a.sub("item.mouseleave", T);
+ }
+ };
+ M();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ var r, i, o;
+ !(function(t, n) {
+ e.exports = n();
+ })(this, function() {
+ return (function(e) {
+ function t(r) {
+ if (n[r]) return n[r].exports;
+ var i = (n[r] = { exports: {}, id: r, loaded: !1 });
+ return (
+ e[r].call(i.exports, i, i.exports, t), (i.loaded = !0), i.exports
+ );
+ }
+ var n = {};
+ return (t.m = e), (t.c = n), (t.p = ""), t(0);
+ })([
+ function(e, t, n) {
+ "use strict";
+ var r = n(1),
+ i = r.create_canvas,
+ o = r.canvas_to_img,
+ a = r.dpr,
+ s = n(2),
+ c = n(3),
+ u = n(4);
+ e.exports = function(e) {
+ var t = Object.assign({}, s, e),
+ n = c(t.text, t.ecLevel, t.minVersion, t.quiet),
+ r = t.ratio || a,
+ l = i(t.size, r),
+ f = l.getContext("2d");
+ return f.scale(r, r), u(n, f, t), "image" === t.render ? o(l) : l;
+ };
+ },
+ function(e, t) {
+ "use strict";
+ var n = window,
+ r = n.document,
+ i = n.devicePixelRatio || 1,
+ o = function(e) {
+ return r.createElement(e);
+ },
+ a = function(e, t) {
+ return e.getAttribute(t);
+ },
+ s = function(e, t, n) {
+ return e.setAttribute(t, n);
+ },
+ c = function(e, t) {
+ var n = o("canvas");
+ return (
+ s(n, "width", e * t),
+ s(n, "height", e * t),
+ (n.style.width = e + "px"),
+ (n.style.height = e + "px"),
+ n
+ );
+ },
+ u = function(e) {
+ var t = o("img");
+ return (
+ s(t, "crossorigin", "anonymous"),
+ s(t, "src", e.toDataURL("image/png")),
+ s(t, "width", a(e, "width")),
+ s(t, "height", a(e, "height")),
+ (t.style.width = e.style.width),
+ (t.style.height = e.style.height),
+ t
+ );
+ };
+ e.exports = { create_canvas: c, canvas_to_img: u, dpr: i };
+ },
+ function(e, t) {
+ "use strict";
+ e.exports = {
+ render: "image",
+ crisp: !0,
+ minVersion: 1,
+ ecLevel: "L",
+ size: 200,
+ ratio: null,
+ fill: "#333",
+ back: "#fff",
+ text: "no text",
+ rounded: 0,
+ quiet: 0,
+ mode: "plain",
+ mSize: 30,
+ mPosX: 50,
+ mPosY: 50,
+ label: "no label",
+ fontname: "sans",
+ fontcolor: "#333",
+ image: null,
+ };
+ },
+ function(n, a) {
+ "use strict";
+ var s =
+ "function" == typeof Symbol &&
+ "symbol" == typeof Symbol.iterator ?
+
+ function(e) {
+ return typeof e;
+ } :
+ function(e) {
+ return e &&
+ "function" == typeof Symbol &&
+ e.constructor === Symbol &&
+ e !== Symbol.prototype ?
+ "symbol" :
+ typeof e;
+ },
+ c = /code length overflow/i,
+ u = (function() {
+ var n = (function() {
+ function e(t, n) {
+ if ("undefined" == typeof t.length)
+ throw new Error(t.length + "/" + n);
+ var r = (function() {
+ for (var e = 0; e < t.length && 0 == t[e];) e += 1;
+ for (
+ var r = new Array(t.length - e + n), i = 0; i < t.length - e; i += 1
+ )
+ r[i] = t[i + e];
+ return r;
+ })(),
+ i = {};
+ return (
+ (i.getAt = function(e) {
+ return r[e];
+ }),
+ (i.getLength = function() {
+ return r.length;
+ }),
+ (i.multiply = function(t) {
+ for (
+ var n = new Array(i.getLength() + t.getLength() - 1),
+ r = 0; r < i.getLength(); r += 1
+ )
+ for (var o = 0; o < t.getLength(); o += 1)
+ n[r + o] ^= a.gexp(
+ a.glog(i.getAt(r)) + a.glog(t.getAt(o))
+ );
+ return e(n, 0);
+ }),
+ (i.mod = function(t) {
+ if (i.getLength() - t.getLength() < 0) return i;
+ for (
+ var n = a.glog(i.getAt(0)) - a.glog(t.getAt(0)),
+ r = new Array(i.getLength()),
+ o = 0; o < i.getLength(); o += 1
+ )
+ r[o] = i.getAt(o);
+ for (var o = 0; o < t.getLength(); o += 1)
+ r[o] ^= a.gexp(a.glog(t.getAt(o)) + n);
+ return e(r, 0).mod(t);
+ }),
+ i
+ );
+ }
+ var t = function(t, n) {
+ var i = 236,
+ a = 17,
+ l = t,
+ f = r[n],
+ d = null,
+ p = 0,
+ g = null,
+ m = new Array(),
+ v = {},
+ b = function(e, t) {
+ (p = 4 * l + 17),
+ (d = (function(e) {
+ for (var t = new Array(e), n = 0; n < e; n += 1) {
+ t[n] = new Array(e);
+ for (var r = 0; r < e; r += 1) t[n][r] = null;
+ }
+ return t;
+ })(p)),
+ w(0, 0),
+ w(p - 7, 0),
+ w(0, p - 7),
+ k(),
+ x(),
+ C(e, t),
+ l >= 7 && _(e),
+ null == g && (g = T(l, f, m)),
+ S(g, t);
+ },
+ w = function(e, t) {
+ for (var n = -1; n <= 7; n += 1)
+ if (!(e + n <= -1 || p <= e + n))
+ for (var r = -1; r <= 7; r += 1)
+ t + r <= -1 ||
+ p <= t + r ||
+ ((0 <= n && n <= 6 && (0 == r || 6 == r)) ||
+ (0 <= r && r <= 6 && (0 == n || 6 == n)) ||
+ (2 <= n && n <= 4 && 2 <= r && r <= 4) ?
+ (d[e + n][t + r] = !0) :
+ (d[e + n][t + r] = !1));
+ },
+ y = function() {
+ for (var e = 0, t = 0, n = 0; n < 8; n += 1) {
+ b(!0, n);
+ var r = o.getLostPoint(v);
+ (0 == n || e > r) && ((e = r), (t = n));
+ }
+ return t;
+ },
+ x = function() {
+ for (var e = 8; e < p - 8; e += 1)
+ null == d[e][6] && (d[e][6] = e % 2 == 0);
+ for (var t = 8; t < p - 8; t += 1)
+ null == d[6][t] && (d[6][t] = t % 2 == 0);
+ },
+ k = function() {
+ for (
+ var e = o.getPatternPosition(l), t = 0; t < e.length; t += 1
+ )
+ for (var n = 0; n < e.length; n += 1) {
+ var r = e[t],
+ i = e[n];
+ if (null == d[r][i])
+ for (var a = -2; a <= 2; a += 1)
+ for (var s = -2; s <= 2; s += 1)
+ a == -2 ||
+ 2 == a ||
+ s == -2 ||
+ 2 == s ||
+ (0 == a && 0 == s) ?
+ (d[r + a][i + s] = !0) :
+ (d[r + a][i + s] = !1);
+ }
+ },
+ _ = function(e) {
+ for (
+ var t = o.getBCHTypeNumber(l), n = 0; n < 18; n += 1
+ ) {
+ var r = !e && 1 == ((t >> n) & 1);
+ d[Math.floor(n / 3)][(n % 3) + p - 8 - 3] = r;
+ }
+ for (var n = 0; n < 18; n += 1) {
+ var r = !e && 1 == ((t >> n) & 1);
+ d[(n % 3) + p - 8 - 3][Math.floor(n / 3)] = r;
+ }
+ },
+ C = function(e, t) {
+ for (
+ var n = (f << 3) | t, r = o.getBCHTypeInfo(n), i = 0; i < 15; i += 1
+ ) {
+ var a = !e && 1 == ((r >> i) & 1);
+ i < 6 ?
+ (d[i][8] = a) :
+ i < 8 ?
+ (d[i + 1][8] = a) :
+ (d[p - 15 + i][8] = a);
+ }
+ for (var i = 0; i < 15; i += 1) {
+ var a = !e && 1 == ((r >> i) & 1);
+ i < 8 ?
+ (d[8][p - i - 1] = a) :
+ i < 9 ?
+ (d[8][15 - i - 1 + 1] = a) :
+ (d[8][15 - i - 1] = a);
+ }
+ d[p - 8][8] = !e;
+ },
+ S = function(e, t) {
+ for (
+ var n = -1,
+ r = p - 1,
+ i = 7,
+ a = 0,
+ s = o.getMaskFunction(t),
+ c = p - 1; c > 0; c -= 2
+ )
+ for (6 == c && (c -= 1);;) {
+ for (var u = 0; u < 2; u += 1)
+ if (null == d[r][c - u]) {
+ var l = !1;
+ a < e.length && (l = 1 == ((e[a] >>> i) & 1));
+ var f = s(r, c - u);
+ f && (l = !l),
+ (d[r][c - u] = l),
+ (i -= 1),
+ i == -1 && ((a += 1), (i = 7));
+ }
+ if (((r += n), r < 0 || p <= r)) {
+ (r -= n), (n = -n);
+ break;
+ }
+ }
+ },
+ A = function(t, n) {
+ for (
+ var r = 0,
+ i = 0,
+ a = 0,
+ s = new Array(n.length),
+ c = new Array(n.length),
+ u = 0; u < n.length; u += 1
+ ) {
+ var l = n[u].dataCount,
+ f = n[u].totalCount - l;
+ (i = Math.max(i, l)),
+ (a = Math.max(a, f)),
+ (s[u] = new Array(l));
+ for (var d = 0; d < s[u].length; d += 1)
+ s[u][d] = 255 & t.getBuffer()[d + r];
+ r += l;
+ var p = o.getErrorCorrectPolynomial(f),
+ h = e(s[u], p.getLength() - 1),
+ g = h.mod(p);
+ c[u] = new Array(p.getLength() - 1);
+ for (var d = 0; d < c[u].length; d += 1) {
+ var m = d + g.getLength() - c[u].length;
+ c[u][d] = m >= 0 ? g.getAt(m) : 0;
+ }
+ }
+ for (var v = 0, d = 0; d < n.length; d += 1)
+ v += n[d].totalCount;
+ for (var b = new Array(v), w = 0, d = 0; d < i; d += 1)
+ for (var u = 0; u < n.length; u += 1)
+ d < s[u].length && ((b[w] = s[u][d]), (w += 1));
+ for (var d = 0; d < a; d += 1)
+ for (var u = 0; u < n.length; u += 1)
+ d < c[u].length && ((b[w] = c[u][d]), (w += 1));
+ return b;
+ },
+ T = function(e, t, n) {
+ for (
+ var r = s.getRSBlocks(e, t), u = c(), l = 0; l < n.length; l += 1
+ ) {
+ var f = n[l];
+ u.put(f.getMode(), 4),
+ u.put(
+ f.getLength(),
+ o.getLengthInBits(f.getMode(), e)
+ ),
+ f.write(u);
+ }
+ for (var d = 0, l = 0; l < r.length; l += 1)
+ d += r[l].dataCount;
+ if (u.getLengthInBits() > 8 * d)
+ throw new Error(
+ "code length overflow. (" +
+ u.getLengthInBits() +
+ ">" +
+ 8 * d +
+ ")"
+ );
+ for (
+ u.getLengthInBits() + 4 <= 8 * d && u.put(0, 4); u.getLengthInBits() % 8 != 0;
+
+ )
+ u.putBit(!1);
+ for (; !(u.getLengthInBits() >= 8 * d) &&
+ (u.put(i, 8), !(u.getLengthInBits() >= 8 * d));
+
+ )
+ u.put(a, 8);
+ return A(u, r);
+ };
+ return (
+ (v.addData = function(e) {
+ var t = u(e);
+ m.push(t), (g = null);
+ }),
+ (v.isDark = function(e, t) {
+ if (e < 0 || p <= e || t < 0 || p <= t)
+ throw new Error(e + "," + t);
+ return d[e][t];
+ }),
+ (v.getModuleCount = function() {
+ return p;
+ }),
+ (v.make = function() {
+ b(!1, y());
+ }),
+ (v.createTableTag = function(e, t) {
+ (e = e || 2), (t = "undefined" == typeof t ? 4 * e : t);
+ var n = "";
+ (n += '<table style="'),
+ (n += " border-width: 0px; border-style: none;"),
+ (n += " border-collapse: collapse;"),
+ (n += " padding: 0px; margin: " + t + "px;"),
+ (n += '">'),
+ (n += "<tbody>");
+ for (var r = 0; r < v.getModuleCount(); r += 1) {
+ n += "<tr>";
+ for (var i = 0; i < v.getModuleCount(); i += 1)
+ (n += '<td style="'),
+ (n += " border-width: 0px; border-style: none;"),
+ (n += " border-collapse: collapse;"),
+ (n += " padding: 0px; margin: 0px;"),
+ (n += " width: " + e + "px;"),
+ (n += " height: " + e + "px;"),
+ (n += " background-color: "),
+ (n += v.isDark(r, i) ? "#000000" : "#ffffff"),
+ (n += ";"),
+ (n += '"/>');
+ n += "</tr>";
+ }
+ return (n += "</tbody>"), (n += "</table>");
+ }),
+ (v.createImgTag = function(e, t) {
+ (e = e || 2), (t = "undefined" == typeof t ? 4 * e : t);
+ var n = v.getModuleCount() * e + 2 * t,
+ r = t,
+ i = n - t;
+ return h(n, n, function(t, n) {
+ if (r <= t && t < i && r <= n && n < i) {
+ var o = Math.floor((t - r) / e),
+ a = Math.floor((n - r) / e);
+ return v.isDark(a, o) ? 0 : 1;
+ }
+ return 1;
+ });
+ }),
+ v
+ );
+ };
+ (t.stringToBytes = function(e) {
+ for (var t = new Array(), n = 0; n < e.length; n += 1) {
+ var r = e.charCodeAt(n);
+ t.push(255 & r);
+ }
+ return t;
+ }),
+ (t.createStringToBytes = function(e, t) {
+ var n = (function() {
+ for (
+ var n = d(e),
+ r = function() {
+ var e = n.read();
+ if (e == -1) throw new Error();
+ return e;
+ },
+ i = 0,
+ o = {};;
+
+ ) {
+ var a = n.read();
+ if (a == -1) break;
+ var s = r(),
+ c = r(),
+ u = r(),
+ l = String.fromCharCode((a << 8) | s),
+ f = (c << 8) | u;
+ (o[l] = f), (i += 1);
+ }
+ if (i != t) throw new Error(i + " != " + t);
+ return o;
+ })(),
+ r = "?".charCodeAt(0);
+ return function(e) {
+ for (var t = new Array(), i = 0; i < e.length; i += 1) {
+ var o = e.charCodeAt(i);
+ if (o < 128) t.push(o);
+ else {
+ var a = n[e.charAt(i)];
+ "number" == typeof a
+ ?
+ (255 & a) == a ?
+ t.push(a) :
+ (t.push(a >>> 8), t.push(255 & a)) :
+ t.push(r);
+ }
+ }
+ return t;
+ };
+ });
+ var n = {
+ MODE_NUMBER: 1,
+ MODE_ALPHA_NUM: 2,
+ MODE_8BIT_BYTE: 4,
+ MODE_KANJI: 8,
+ },
+ r = { L: 1, M: 0, Q: 3, H: 2 },
+ i = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7,
+ },
+ o = (function() {
+ var t = [
+ [],
+ [6, 18],
+ [6, 22],
+ [6, 26],
+ [6, 30],
+ [6, 34],
+ [6, 22, 38],
+ [6, 24, 42],
+ [6, 26, 46],
+ [6, 28, 50],
+ [6, 30, 54],
+ [6, 32, 58],
+ [6, 34, 62],
+ [6, 26, 46, 66],
+ [6, 26, 48, 70],
+ [6, 26, 50, 74],
+ [6, 30, 54, 78],
+ [6, 30, 56, 82],
+ [6, 30, 58, 86],
+ [6, 34, 62, 90],
+ [6, 28, 50, 72, 94],
+ [6, 26, 50, 74, 98],
+ [6, 30, 54, 78, 102],
+ [6, 28, 54, 80, 106],
+ [6, 32, 58, 84, 110],
+ [6, 30, 58, 86, 114],
+ [6, 34, 62, 90, 118],
+ [6, 26, 50, 74, 98, 122],
+ [6, 30, 54, 78, 102, 126],
+ [6, 26, 52, 78, 104, 130],
+ [6, 30, 56, 82, 108, 134],
+ [6, 34, 60, 86, 112, 138],
+ [6, 30, 58, 86, 114, 142],
+ [6, 34, 62, 90, 118, 146],
+ [6, 30, 54, 78, 102, 126, 150],
+ [6, 24, 50, 76, 102, 128, 154],
+ [6, 28, 54, 80, 106, 132, 158],
+ [6, 32, 58, 84, 110, 136, 162],
+ [6, 26, 54, 82, 110, 138, 166],
+ [6, 30, 58, 86, 114, 142, 170],
+ ],
+ r = 1335,
+ o = 7973,
+ s = 21522,
+ c = {},
+ u = function(e) {
+ for (var t = 0; 0 != e;)(t += 1), (e >>>= 1);
+ return t;
+ };
+ return (
+ (c.getBCHTypeInfo = function(e) {
+ for (var t = e << 10; u(t) - u(r) >= 0;)
+ t ^= r << (u(t) - u(r));
+ return ((e << 10) | t) ^ s;
+ }),
+ (c.getBCHTypeNumber = function(e) {
+ for (var t = e << 12; u(t) - u(o) >= 0;)
+ t ^= o << (u(t) - u(o));
+ return (e << 12) | t;
+ }),
+ (c.getPatternPosition = function(e) {
+ return t[e - 1];
+ }),
+ (c.getMaskFunction = function(e) {
+ switch (e) {
+ case i.PATTERN000:
+ return function(e, t) {
+ return (e + t) % 2 == 0;
+ };
+ case i.PATTERN001:
+ return function(e, t) {
+ return e % 2 == 0;
+ };
+ case i.PATTERN010:
+ return function(e, t) {
+ return t % 3 == 0;
+ };
+ case i.PATTERN011:
+ return function(e, t) {
+ return (e + t) % 3 == 0;
+ };
+ case i.PATTERN100:
+ return function(e, t) {
+ return (
+ (Math.floor(e / 2) + Math.floor(t / 3)) % 2 ==
+ 0
+ );
+ };
+ case i.PATTERN101:
+ return function(e, t) {
+ return ((e * t) % 2) + ((e * t) % 3) == 0;
+ };
+ case i.PATTERN110:
+ return function(e, t) {
+ return (((e * t) % 2) + ((e * t) % 3)) % 2 == 0;
+ };
+ case i.PATTERN111:
+ return function(e, t) {
+ return (((e * t) % 3) + ((e + t) % 2)) % 2 == 0;
+ };
+ default:
+ throw new Error("bad maskPattern:" + e);
+ }
+ }),
+ (c.getErrorCorrectPolynomial = function(t) {
+ for (var n = e([1], 0), r = 0; r < t; r += 1)
+ n = n.multiply(e([1, a.gexp(r)], 0));
+ return n;
+ }),
+ (c.getLengthInBits = function(e, t) {
+ if (1 <= t && t < 10)
+ switch (e) {
+ case n.MODE_NUMBER:
+ return 10;
+ case n.MODE_ALPHA_NUM:
+ return 9;
+ case n.MODE_8BIT_BYTE:
+ return 8;
+ case n.MODE_KANJI:
+ return 8;
+ default:
+ throw new Error("mode:" + e);
+ }
+ else if (t < 27)
+ switch (e) {
+ case n.MODE_NUMBER:
+ return 12;
+ case n.MODE_ALPHA_NUM:
+ return 11;
+ case n.MODE_8BIT_BYTE:
+ return 16;
+ case n.MODE_KANJI:
+ return 10;
+ default:
+ throw new Error("mode:" + e);
+ }
+ else {
+ if (!(t < 41)) throw new Error("type:" + t);
+ switch (e) {
+ case n.MODE_NUMBER:
+ return 14;
+ case n.MODE_ALPHA_NUM:
+ return 13;
+ case n.MODE_8BIT_BYTE:
+ return 16;
+ case n.MODE_KANJI:
+ return 12;
+ default:
+ throw new Error("mode:" + e);
+ }
+ }
+ }),
+ (c.getLostPoint = function(e) {
+ for (
+ var t = e.getModuleCount(), n = 0, r = 0; r < t; r += 1
+ )
+ for (var i = 0; i < t; i += 1) {
+ for (
+ var o = 0, a = e.isDark(r, i), s = -1; s <= 1; s += 1
+ )
+ if (!(r + s < 0 || t <= r + s))
+ for (var c = -1; c <= 1; c += 1)
+ i + c < 0 ||
+ t <= i + c ||
+ (0 == s && 0 == c) ||
+ (a == e.isDark(r + s, i + c) && (o += 1));
+ o > 5 && (n += 3 + o - 5);
+ }
+ for (var r = 0; r < t - 1; r += 1)
+ for (var i = 0; i < t - 1; i += 1) {
+ var u = 0;
+ e.isDark(r, i) && (u += 1),
+ e.isDark(r + 1, i) && (u += 1),
+ e.isDark(r, i + 1) && (u += 1),
+ e.isDark(r + 1, i + 1) && (u += 1),
+ (0 != u && 4 != u) || (n += 3);
+ }
+ for (var r = 0; r < t; r += 1)
+ for (var i = 0; i < t - 6; i += 1)
+ e.isDark(r, i) &&
+ !e.isDark(r, i + 1) &&
+ e.isDark(r, i + 2) &&
+ e.isDark(r, i + 3) &&
+ e.isDark(r, i + 4) &&
+ !e.isDark(r, i + 5) &&
+ e.isDark(r, i + 6) &&
+ (n += 40);
+ for (var i = 0; i < t; i += 1)
+ for (var r = 0; r < t - 6; r += 1)
+ e.isDark(r, i) &&
+ !e.isDark(r + 1, i) &&
+ e.isDark(r + 2, i) &&
+ e.isDark(r + 3, i) &&
+ e.isDark(r + 4, i) &&
+ !e.isDark(r + 5, i) &&
+ e.isDark(r + 6, i) &&
+ (n += 40);
+ for (var l = 0, i = 0; i < t; i += 1)
+ for (var r = 0; r < t; r += 1)
+ e.isDark(r, i) && (l += 1);
+ var f = Math.abs((100 * l) / t / t - 50) / 5;
+ return (n += 10 * f);
+ }),
+ c
+ );
+ })(),
+ a = (function() {
+ for (
+ var e = new Array(256), t = new Array(256), n = 0; n < 8; n += 1
+ )
+ e[n] = 1 << n;
+ for (var n = 8; n < 256; n += 1)
+ e[n] = e[n - 4] ^ e[n - 5] ^ e[n - 6] ^ e[n - 8];
+ for (var n = 0; n < 255; n += 1) t[e[n]] = n;
+ var r = {};
+ return (
+ (r.glog = function(e) {
+ if (e < 1) throw new Error("glog(" + e + ")");
+ return t[e];
+ }),
+ (r.gexp = function(t) {
+ for (; t < 0;) t += 255;
+ for (; t >= 256;) t -= 255;
+ return e[t];
+ }),
+ r
+ );
+ })(),
+ s = (function() {
+ var e = [
+ [1, 26, 19],
+ [1, 26, 16],
+ [1, 26, 13],
+ [1, 26, 9],
+ [1, 44, 34],
+ [1, 44, 28],
+ [1, 44, 22],
+ [1, 44, 16],
+ [1, 70, 55],
+ [1, 70, 44],
+ [2, 35, 17],
+ [2, 35, 13],
+ [1, 100, 80],
+ [2, 50, 32],
+ [2, 50, 24],
+ [4, 25, 9],
+ [1, 134, 108],
+ [2, 67, 43],
+ [2, 33, 15, 2, 34, 16],
+ [2, 33, 11, 2, 34, 12],
+ [2, 86, 68],
+ [4, 43, 27],
+ [4, 43, 19],
+ [4, 43, 15],
+ [2, 98, 78],
+ [4, 49, 31],
+ [2, 32, 14, 4, 33, 15],
+ [4, 39, 13, 1, 40, 14],
+ [2, 121, 97],
+ [2, 60, 38, 2, 61, 39],
+ [4, 40, 18, 2, 41, 19],
+ [4, 40, 14, 2, 41, 15],
+ [2, 146, 116],
+ [3, 58, 36, 2, 59, 37],
+ [4, 36, 16, 4, 37, 17],
+ [4, 36, 12, 4, 37, 13],
+ [2, 86, 68, 2, 87, 69],
+ [4, 69, 43, 1, 70, 44],
+ [6, 43, 19, 2, 44, 20],
+ [6, 43, 15, 2, 44, 16],
+ [4, 101, 81],
+ [1, 80, 50, 4, 81, 51],
+ [4, 50, 22, 4, 51, 23],
+ [3, 36, 12, 8, 37, 13],
+ [2, 116, 92, 2, 117, 93],
+ [6, 58, 36, 2, 59, 37],
+ [4, 46, 20, 6, 47, 21],
+ [7, 42, 14, 4, 43, 15],
+ [4, 133, 107],
+ [8, 59, 37, 1, 60, 38],
+ [8, 44, 20, 4, 45, 21],
+ [12, 33, 11, 4, 34, 12],
+ [3, 145, 115, 1, 146, 116],
+ [4, 64, 40, 5, 65, 41],
+ [11, 36, 16, 5, 37, 17],
+ [11, 36, 12, 5, 37, 13],
+ [5, 109, 87, 1, 110, 88],
+ [5, 65, 41, 5, 66, 42],
+ [5, 54, 24, 7, 55, 25],
+ [11, 36, 12, 7, 37, 13],
+ [5, 122, 98, 1, 123, 99],
+ [7, 73, 45, 3, 74, 46],
+ [15, 43, 19, 2, 44, 20],
+ [3, 45, 15, 13, 46, 16],
+ [1, 135, 107, 5, 136, 108],
+ [10, 74, 46, 1, 75, 47],
+ [1, 50, 22, 15, 51, 23],
+ [2, 42, 14, 17, 43, 15],
+ [5, 150, 120, 1, 151, 121],
+ [9, 69, 43, 4, 70, 44],
+ [17, 50, 22, 1, 51, 23],
+ [2, 42, 14, 19, 43, 15],
+ [3, 141, 113, 4, 142, 114],
+ [3, 70, 44, 11, 71, 45],
+ [17, 47, 21, 4, 48, 22],
+ [9, 39, 13, 16, 40, 14],
+ [3, 135, 107, 5, 136, 108],
+ [3, 67, 41, 13, 68, 42],
+ [15, 54, 24, 5, 55, 25],
+ [15, 43, 15, 10, 44, 16],
+ [4, 144, 116, 4, 145, 117],
+ [17, 68, 42],
+ [17, 50, 22, 6, 51, 23],
+ [19, 46, 16, 6, 47, 17],
+ [2, 139, 111, 7, 140, 112],
+ [17, 74, 46],
+ [7, 54, 24, 16, 55, 25],
+ [34, 37, 13],
+ [4, 151, 121, 5, 152, 122],
+ [4, 75, 47, 14, 76, 48],
+ [11, 54, 24, 14, 55, 25],
+ [16, 45, 15, 14, 46, 16],
+ [6, 147, 117, 4, 148, 118],
+ [6, 73, 45, 14, 74, 46],
+ [11, 54, 24, 16, 55, 25],
+ [30, 46, 16, 2, 47, 17],
+ [8, 132, 106, 4, 133, 107],
+ [8, 75, 47, 13, 76, 48],
+ [7, 54, 24, 22, 55, 25],
+ [22, 45, 15, 13, 46, 16],
+ [10, 142, 114, 2, 143, 115],
+ [19, 74, 46, 4, 75, 47],
+ [28, 50, 22, 6, 51, 23],
+ [33, 46, 16, 4, 47, 17],
+ [8, 152, 122, 4, 153, 123],
+ [22, 73, 45, 3, 74, 46],
+ [8, 53, 23, 26, 54, 24],
+ [12, 45, 15, 28, 46, 16],
+ [3, 147, 117, 10, 148, 118],
+ [3, 73, 45, 23, 74, 46],
+ [4, 54, 24, 31, 55, 25],
+ [11, 45, 15, 31, 46, 16],
+ [7, 146, 116, 7, 147, 117],
+ [21, 73, 45, 7, 74, 46],
+ [1, 53, 23, 37, 54, 24],
+ [19, 45, 15, 26, 46, 16],
+ [5, 145, 115, 10, 146, 116],
+ [19, 75, 47, 10, 76, 48],
+ [15, 54, 24, 25, 55, 25],
+ [23, 45, 15, 25, 46, 16],
+ [13, 145, 115, 3, 146, 116],
+ [2, 74, 46, 29, 75, 47],
+ [42, 54, 24, 1, 55, 25],
+ [23, 45, 15, 28, 46, 16],
+ [17, 145, 115],
+ [10, 74, 46, 23, 75, 47],
+ [10, 54, 24, 35, 55, 25],
+ [19, 45, 15, 35, 46, 16],
+ [17, 145, 115, 1, 146, 116],
+ [14, 74, 46, 21, 75, 47],
+ [29, 54, 24, 19, 55, 25],
+ [11, 45, 15, 46, 46, 16],
+ [13, 145, 115, 6, 146, 116],
+ [14, 74, 46, 23, 75, 47],
+ [44, 54, 24, 7, 55, 25],
+ [59, 46, 16, 1, 47, 17],
+ [12, 151, 121, 7, 152, 122],
+ [12, 75, 47, 26, 76, 48],
+ [39, 54, 24, 14, 55, 25],
+ [22, 45, 15, 41, 46, 16],
+ [6, 151, 121, 14, 152, 122],
+ [6, 75, 47, 34, 76, 48],
+ [46, 54, 24, 10, 55, 25],
+ [2, 45, 15, 64, 46, 16],
+ [17, 152, 122, 4, 153, 123],
+ [29, 74, 46, 14, 75, 47],
+ [49, 54, 24, 10, 55, 25],
+ [24, 45, 15, 46, 46, 16],
+ [4, 152, 122, 18, 153, 123],
+ [13, 74, 46, 32, 75, 47],
+ [48, 54, 24, 14, 55, 25],
+ [42, 45, 15, 32, 46, 16],
+ [20, 147, 117, 4, 148, 118],
+ [40, 75, 47, 7, 76, 48],
+ [43, 54, 24, 22, 55, 25],
+ [10, 45, 15, 67, 46, 16],
+ [19, 148, 118, 6, 149, 119],
+ [18, 75, 47, 31, 76, 48],
+ [34, 54, 24, 34, 55, 25],
+ [20, 45, 15, 61, 46, 16],
+ ],
+ t = function(e, t) {
+ var n = {};
+ return (n.totalCount = e), (n.dataCount = t), n;
+ },
+ n = {},
+ i = function(t, n) {
+ switch (n) {
+ case r.L:
+ return e[4 * (t - 1) + 0];
+ case r.M:
+ return e[4 * (t - 1) + 1];
+ case r.Q:
+ return e[4 * (t - 1) + 2];
+ case r.H:
+ return e[4 * (t - 1) + 3];
+ default:
+ return;
+ }
+ };
+ return (
+ (n.getRSBlocks = function(e, n) {
+ var r = i(e, n);
+ if ("undefined" == typeof r)
+ throw new Error(
+ "bad rs block @ typeNumber:" +
+ e +
+ "/errorCorrectLevel:" +
+ n
+ );
+ for (
+ var o = r.length / 3, a = new Array(), s = 0; s < o; s += 1
+ )
+ for (
+ var c = r[3 * s + 0],
+ u = r[3 * s + 1],
+ l = r[3 * s + 2],
+ f = 0; f < c; f += 1
+ )
+ a.push(t(u, l));
+ return a;
+ }),
+ n
+ );
+ })(),
+ c = function() {
+ var e = new Array(),
+ t = 0,
+ n = {};
+ return (
+ (n.getBuffer = function() {
+ return e;
+ }),
+ (n.getAt = function(t) {
+ var n = Math.floor(t / 8);
+ return 1 == ((e[n] >>> (7 - (t % 8))) & 1);
+ }),
+ (n.put = function(e, t) {
+ for (var r = 0; r < t; r += 1)
+ n.putBit(1 == ((e >>> (t - r - 1)) & 1));
+ }),
+ (n.getLengthInBits = function() {
+ return t;
+ }),
+ (n.putBit = function(n) {
+ var r = Math.floor(t / 8);
+ e.length <= r && e.push(0),
+ n && (e[r] |= 128 >>> t % 8),
+ (t += 1);
+ }),
+ n
+ );
+ },
+ u = function(e) {
+ var r = n.MODE_8BIT_BYTE,
+ i = t.stringToBytes(e),
+ o = {};
+ return (
+ (o.getMode = function() {
+ return r;
+ }),
+ (o.getLength = function(e) {
+ return i.length;
+ }),
+ (o.write = function(e) {
+ for (var t = 0; t < i.length; t += 1) e.put(i[t], 8);
+ }),
+ o
+ );
+ },
+ l = function() {
+ var e = new Array(),
+ t = {};
+ return (
+ (t.writeByte = function(t) {
+ e.push(255 & t);
+ }),
+ (t.writeShort = function(e) {
+ t.writeByte(e), t.writeByte(e >>> 8);
+ }),
+ (t.writeBytes = function(e, n, r) {
+ (n = n || 0), (r = r || e.length);
+ for (var i = 0; i < r; i += 1) t.writeByte(e[i + n]);
+ }),
+ (t.writeString = function(e) {
+ for (var n = 0; n < e.length; n += 1)
+ t.writeByte(e.charCodeAt(n));
+ }),
+ (t.toByteArray = function() {
+ return e;
+ }),
+ (t.toString = function() {
+ var t = "";
+ t += "[";
+ for (var n = 0; n < e.length; n += 1)
+ n > 0 && (t += ","), (t += e[n]);
+ return (t += "]");
+ }),
+ t
+ );
+ },
+ f = function() {
+ var e = 0,
+ t = 0,
+ n = 0,
+ r = "",
+ i = {},
+ o = function(e) {
+ r += String.fromCharCode(a(63 & e));
+ },
+ a = function(e) {
+ if (e < 0);
+ else {
+ if (e < 26) return 65 + e;
+ if (e < 52) return 97 + (e - 26);
+ if (e < 62) return 48 + (e - 52);
+ if (62 == e) return 43;
+ if (63 == e) return 47;
+ }
+ throw new Error("n:" + e);
+ };
+ return (
+ (i.writeByte = function(r) {
+ for (
+ e = (e << 8) | (255 & r), t += 8, n += 1; t >= 6;
+
+ )
+ o(e >>> (t - 6)), (t -= 6);
+ }),
+ (i.flush = function() {
+ if (
+ (t > 0 && (o(e << (6 - t)), (e = 0), (t = 0)),
+ n % 3 != 0)
+ )
+ for (var i = 3 - (n % 3), a = 0; a < i; a += 1)
+ r += "=";
+ }),
+ (i.toString = function() {
+ return r;
+ }),
+ i
+ );
+ },
+ d = function(e) {
+ var t = e,
+ n = 0,
+ r = 0,
+ i = 0,
+ o = {};
+ o.read = function() {
+ for (; i < 8;) {
+ if (n >= t.length) {
+ if (0 == i) return -1;
+ throw new Error("unexpected end of file./" + i);
+ }
+ var e = t.charAt(n);
+ if (((n += 1), "=" == e)) return (i = 0), -1;
+ e.match(/^\s$/) ||
+ ((r = (r << 6) | a(e.charCodeAt(0))), (i += 6));
+ }
+ var o = (r >>> (i - 8)) & 255;
+ return (i -= 8), o;
+ };
+ var a = function(e) {
+ if (65 <= e && e <= 90) return e - 65;
+ if (97 <= e && e <= 122) return e - 97 + 26;
+ if (48 <= e && e <= 57) return e - 48 + 52;
+ if (43 == e) return 62;
+ if (47 == e) return 63;
+ throw new Error("c:" + e);
+ };
+ return o;
+ },
+ p = function(e, t) {
+ var n = e,
+ r = t,
+ i = new Array(e * t),
+ o = {};
+ (o.setPixel = function(e, t, r) {
+ i[t * n + e] = r;
+ }),
+ (o.write = function(e) {
+ e.writeString("GIF87a"),
+ e.writeShort(n),
+ e.writeShort(r),
+ e.writeByte(128),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(0),
+ e.writeByte(255),
+ e.writeByte(255),
+ e.writeByte(255),
+ e.writeString(","),
+ e.writeShort(0),
+ e.writeShort(0),
+ e.writeShort(n),
+ e.writeShort(r),
+ e.writeByte(0);
+ var t = 2,
+ i = s(t);
+ e.writeByte(t);
+ for (var o = 0; i.length - o > 255;)
+ e.writeByte(255),
+ e.writeBytes(i, o, 255),
+ (o += 255);
+ e.writeByte(i.length - o),
+ e.writeBytes(i, o, i.length - o),
+ e.writeByte(0),
+ e.writeString(";");
+ });
+ var a = function(e) {
+ var t = e,
+ n = 0,
+ r = 0,
+ i = {};
+ return (
+ (i.write = function(e, i) {
+ if (e >>> i != 0) throw new Error("length over");
+ for (; n + i >= 8;)
+ t.writeByte(255 & ((e << n) | r)),
+ (i -= 8 - n),
+ (e >>>= 8 - n),
+ (r = 0),
+ (n = 0);
+ (r |= e << n), (n += i);
+ }),
+ (i.flush = function() {
+ n > 0 && t.writeByte(r);
+ }),
+ i
+ );
+ },
+ s = function(e) {
+ for (
+ var t = 1 << e,
+ n = (1 << e) + 1,
+ r = e + 1,
+ o = c(),
+ s = 0; s < t; s += 1
+ )
+ o.add(String.fromCharCode(s));
+ o.add(String.fromCharCode(t)),
+ o.add(String.fromCharCode(n));
+ var u = l(),
+ f = a(u);
+ f.write(t, r);
+ var d = 0,
+ p = String.fromCharCode(i[d]);
+ for (d += 1; d < i.length;) {
+ var h = String.fromCharCode(i[d]);
+ (d += 1),
+ o.contains(p + h) ?
+ (p += h) :
+ (f.write(o.indexOf(p), r),
+ o.size() < 4095 &&
+ (o.size() == 1 << r && (r += 1),
+ o.add(p + h)),
+ (p = h));
+ }
+ return (
+ f.write(o.indexOf(p), r),
+ f.write(n, r),
+ f.flush(),
+ u.toByteArray()
+ );
+ },
+ c = function() {
+ var e = {},
+ t = 0,
+ n = {};
+ return (
+ (n.add = function(r) {
+ if (n.contains(r))
+ throw new Error("dup key:" + r);
+ (e[r] = t), (t += 1);
+ }),
+ (n.size = function() {
+ return t;
+ }),
+ (n.indexOf = function(t) {
+ return e[t];
+ }),
+ (n.contains = function(t) {
+ return "undefined" != typeof e[t];
+ }),
+ n
+ );
+ };
+ return o;
+ },
+ h = function(e, t, n, r) {
+ for (var i = p(e, t), o = 0; o < t; o += 1)
+ for (var a = 0; a < e; a += 1)
+ i.setPixel(a, o, n(a, o));
+ var s = l();
+ i.write(s);
+ for (
+ var c = f(), u = s.toByteArray(), d = 0; d < u.length; d += 1
+ )
+ c.writeByte(u[d]);
+ c.flush();
+ var h = "";
+ return (
+ (h += "<img"),
+ (h += ' src="'),
+ (h += "data:image/gif;base64,"),
+ (h += c),
+ (h += '"'),
+ (h += ' width="'),
+ (h += e),
+ (h += '"'),
+ (h += ' height="'),
+ (h += t),
+ (h += '"'),
+ r && ((h += ' alt="'), (h += r), (h += '"')),
+ (h += "/>")
+ );
+ };
+ return t;
+ })();
+ return (
+ (function(n) {
+ (i = []),
+ (r = n),
+ (o = "function" == typeof r ? r.apply(t, i) : r), !(void 0 !== o && (e.exports = o));
+ })(function() {
+ return n;
+ }), !(function(e) {
+ e.stringToBytes = function(e) {
+ function t(e) {
+ for (var t = [], n = 0; n < e.length; n++) {
+ var r = e.charCodeAt(n);
+ r < 128 ?
+ t.push(r) :
+ r < 2048 ?
+ t.push(192 | (r >> 6), 128 | (63 & r)) :
+ r < 55296 || r >= 57344 ?
+ t.push(
+ 224 | (r >> 12),
+ 128 | ((r >> 6) & 63),
+ 128 | (63 & r)
+ ) :
+ (n++,
+ (r =
+ 65536 +
+ (((1023 & r) << 10) |
+ (1023 & e.charCodeAt(n)))),
+ t.push(
+ 240 | (r >> 18),
+ 128 | ((r >> 12) & 63),
+ 128 | ((r >> 6) & 63),
+ 128 | (63 & r)
+ ));
+ }
+ return t;
+ }
+ return t(e);
+ };
+ })(n),
+ n
+ );
+ })(),
+ l = function(e, t) {
+ var n =
+ arguments.length > 2 && void 0 !== arguments[2] ?
+ arguments[2] :
+ 1;
+ n = Math.max(1, n);
+ for (var r = n; r <= 40; r += 1)
+ try {
+ var i = (function() {
+ var n = u(r, t);
+ n.addData(e), n.make();
+ var i = n.getModuleCount(),
+ o = function(e, t) {
+ return (
+ e >= 0 && e < i && t >= 0 && t < i && n.isDark(e, t)
+ );
+ };
+ return {
+ v: {
+ text: e,
+ level: t,
+ version: r,
+ moduleCount: i,
+ isDark: o,
+ },
+ };
+ })();
+ if (
+ "object" ===
+ ("undefined" == typeof i ? "undefined" : s(i))
+ )
+ return i.v;
+ } catch (e) {
+ if (!(r < 40 && c.test(e.message))) throw e;
+ }
+ return null;
+ },
+ f = function() {
+ var e =
+ arguments.length > 0 && void 0 !== arguments[0] ?
+ arguments[0] :
+ "",
+ t =
+ arguments.length > 1 && void 0 !== arguments[1] ?
+ arguments[1] :
+ "L",
+ n =
+ arguments.length > 2 && void 0 !== arguments[2] ?
+ arguments[2] :
+ 1,
+ r =
+ arguments.length > 3 && void 0 !== arguments[3] ?
+ arguments[3] :
+ 0,
+ i = l(e, t, n);
+ if (i) {
+ var o = i.isDark;
+ (i.moduleCount += 2 * r),
+ (i.isDark = function(e, t) {
+ return o(e - r, t - r);
+ });
+ }
+ return i;
+ };
+ n.exports = f;
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(5),
+ i = n(6),
+ o = function(e, t) {
+ (e.fillStyle = t.back), e.fillRect(0, 0, t.size, t.size);
+ },
+ a = function(e, t, n, r, i, o) {
+ e.isDark(i, o) && t.rect(o * r, i * r, r, r);
+ },
+ s = function(e, t, n) {
+ if (e) {
+ var i = n.rounded > 0 && n.rounded <= 100 ? r : a,
+ o = e.moduleCount,
+ s = n.size / o,
+ c = 0;
+ n.crisp &&
+ ((s = Math.floor(s)),
+ (c = Math.floor((n.size - s * o) / 2))),
+ t.translate(c, c),
+ t.beginPath();
+ for (var u = 0; u < o; u += 1)
+ for (var l = 0; l < o; l += 1) i(e, t, n, s, u, l);
+ (t.fillStyle = n.fill), t.fill(), t.translate(-c, -c);
+ }
+ },
+ c = function(e, t, n) {
+ o(t, n), s(e, t, n), i(t, n);
+ };
+ e.exports = c;
+ },
+ function(e, t) {
+ "use strict";
+ var n = function(e) {
+ return {
+ c: e,
+ m: function() {
+ var e;
+ return (e = this.c).moveTo.apply(e, arguments), this;
+ },
+ l: function() {
+ var e;
+ return (e = this.c).lineTo.apply(e, arguments), this;
+ },
+ a: function() {
+ var e;
+ return (e = this.c).arcTo.apply(e, arguments), this;
+ },
+ };
+ },
+ r = function(e, t, n, r, i, o, a, s, c, u) {
+ a ? e.m(t + o, n) : e.m(t, n),
+ s ? e.l(r - o, n).a(r, n, r, i, o) : e.l(r, n),
+ c ? e.l(r, i - o).a(r, i, t, i, o) : e.l(r, i),
+ u ? e.l(t + o, i).a(t, i, t, n, o) : e.l(t, i),
+ a ? e.l(t, n + o).a(t, n, r, n, o) : e.l(t, n);
+ },
+ i = function(e, t, n, r, i, o, a, s, c, u) {
+ a &&
+ e
+ .m(t + o, n)
+ .l(t, n)
+ .l(t, n + o)
+ .a(t, n, t + o, n, o),
+ s &&
+ e
+ .m(r - o, n)
+ .l(r, n)
+ .l(r, n + o)
+ .a(r, n, r - o, n, o),
+ c &&
+ e
+ .m(r - o, i)
+ .l(r, i)
+ .l(r, i - o)
+ .a(r, i, r - o, i, o),
+ u &&
+ e
+ .m(t + o, i)
+ .l(t, i)
+ .l(t, i - o)
+ .a(t, i, t + o, i, o);
+ },
+ o = function(e, t, o, a, s, c) {
+ var u = c * a,
+ l = s * a,
+ f = u + a,
+ d = l + a,
+ p = 0.005 * o.rounded * a,
+ h = e.isDark,
+ g = s - 1,
+ m = s + 1,
+ v = c - 1,
+ b = c + 1,
+ w = h(s, c),
+ y = h(g, v),
+ x = h(g, c),
+ k = h(g, b),
+ _ = h(s, b),
+ C = h(m, b),
+ S = h(m, c),
+ A = h(m, v),
+ T = h(s, v);
+ (t = n(t)),
+ w
+ ?
+ r(
+ t,
+ u,
+ l,
+ f,
+ d,
+ p, !x && !T, !x && !_, !S && !_, !S && !T
+ ) :
+ i(
+ t,
+ u,
+ l,
+ f,
+ d,
+ p,
+ x && T && y,
+ x && _ && k,
+ S && _ && C,
+ S && T && A
+ );
+ };
+ e.exports = o;
+ },
+ function(e, t) {
+ "use strict";
+ var n = function(e, t) {
+ var n = t.size,
+ r = "bold " + 0.01 * t.mSize * n + "px " + t.fontname;
+ (e.strokeStyle = t.back),
+ (e.lineWidth = 0.01 * t.mSize * n * 0.1),
+ (e.fillStyle = t.fontcolor),
+ (e.font = r);
+ var i = e.measureText(t.label).width,
+ o = 0.01 * t.mSize,
+ a = i / n,
+ s = (1 - a) * t.mPosX * 0.01,
+ c = (1 - o) * t.mPosY * 0.01,
+ u = s * n,
+ l = c * n + 0.75 * t.mSize * 0.01 * n;
+ e.strokeText(t.label, u, l), e.fillText(t.label, u, l);
+ },
+ r = function(e, t) {
+ var n = t.size,
+ r = t.image.naturalWidth || 1,
+ i = t.image.naturalHeight || 1,
+ o = 0.01 * t.mSize,
+ a = (o * r) / i,
+ s = (1 - a) * t.mPosX * 0.01,
+ c = (1 - o) * t.mPosY * 0.01,
+ u = s * n,
+ l = c * n,
+ f = a * n,
+ d = o * n;
+ e.draw_image(t.image, u, l, f, d);
+ },
+ i = function(e, t) {
+ var i = t.mode;
+ "label" === i ? n(e, t) : "image" === i && r(e, t);
+ };
+ e.exports = i;
+ },
+ ]);
+ });
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.each,
+ i = t.isStr,
+ o = t.dom,
+ a = n(8),
+ s = n(12),
+ c = n(19),
+ u = n(35),
+ l = n(14),
+ f = n(16),
+ d = e.window,
+ p = Object.assign({ enabled: !1, lang: "en", useBrowserLang: !0 },
+ l.l10n
+ ),
+ h = {
+ isoCode: "en",
+ lang: "english",
+ dateFormat: "YYYY-MM-DD HH:mm",
+ details: "details",
+ download: "download",
+ empty: "empty",
+ files: "files",
+ filter: "filter",
+ folders: "folders",
+ grid: "grid",
+ icons: "icons",
+ language: "Language",
+ lastModified: "Last modified",
+ name: "Name",
+ noMatch: "no match",
+ parentDirectory: "Parent Directory",
+ search: "search",
+ size: "Size",
+ tree: "Tree",
+ view: "View",
+ },
+ g =
+ '<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',
+ m = "<option/>",
+ v = "ext/l10n",
+ b = { en: Object.assign({}, h) },
+ w = b.en,
+ y = function(e) {
+ e && (w = e);
+ var t = "selected";
+ o("#langs option").rmAttr(t).rmProp(t),
+ o("#langs ." + w.isoCode)
+ .attr(t, "")
+ .prop(t, !0),
+ r(w, function(e, t) {
+ o(".l10n-" + t).text(e),
+ o(".l10n_ph-" + t).attr("placeholder", e);
+ }),
+ c.setDefaultDateFormat(w.dateFormat),
+ o("#items .item").each(function(e) {
+ o(e).find(".date").text(c.formatDate(e._item.time));
+ });
+ },
+ x = function(e) {
+ return b[e] ?
+ Promise.resolve(b[e]) :
+ a.request({ action: "get", l10n: [e] }).then(function(t) {
+ return (
+ (b[e] = Object.assign({}, h, t.l10n && t.l10n[e], {
+ isoCode: e,
+ })),
+ b[e]
+ );
+ });
+ },
+ k = function(e, t, n) {
+ var r = f.get(v);
+ if (e[r]) t = r;
+ else if (n) {
+ var i = d.navigator.language || d.navigator.browserLanguage;
+ i &&
+ (e[i] ?
+ (t = i) :
+ i.length > 2 && e[i.substr(0, 2)] && (t = i.substr(0, 2)));
+ }
+ e[t] || (t = "en"), x(t).then(y);
+ },
+ _ = function(e) {
+ var t = o(g),
+ n = t.find("select").on("change", function(t) {
+ var n = t.target.value;
+ f.put(v, n), k(e, n, !1);
+ });
+ r(e, function(e, t) {
+ o(m)
+ .attr("value", t)
+ .addCls(t)
+ .text(t + " - " + (i(e) ? e : e.lang))
+ .appTo(n);
+ }),
+ t.appTo("#sidebar");
+ },
+ C = function() {
+ p.enabled && _(u),
+ s.sub("view.changed", function() {
+ k(u, p.lang, p.useBrowserLang);
+ });
+ };
+ C();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(7),
+ i = r.langs;
+ e.exports = Object.assign({}, i);
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.dom,
+ i = t.awaitLoad,
+ o = n(12),
+ a = n(14),
+ s = e.window,
+ c = Object.assign({ enabled: !1, baseURL: "not-set", idSite: 0 },
+ a["piwik-analytics"]
+ ),
+ u = function() {
+ if (c.enabled) {
+ var e =
+ ("https:" === s.location.protocol ? "https://" : "http://") +
+ c.baseURL +
+ "/",
+ t = [],
+ n = null;
+ r("<script></script>")
+ .attr("src", e + "piwik.js")
+ .appTo("body"),
+ i().then(function() {
+ if (
+ (n =
+ s.Piwik && s.Piwik.getTracker(e + "piwik.php", c.idSite))
+ )
+ for (n.enableLinkTracking(); t.length;)
+ n.trackPageView(t.shift());
+ }),
+ o.sub("location.changed", function(e) {
+ var r = e
+ .getCrumb()
+ .map(function(e) {
+ return e.label;
+ })
+ .join(" > ");
+ n ? n.trackPageView(r) : t.push(r);
+ });
+ }
+ };
+ u();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ n(38), n(39), n(40), n(41), n(43);
+ },
+ function(e, t, n) {
+ (function(t) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.isFn,
+ a = r.dom,
+ s = r.includes,
+ c = r.compact,
+ u = n(12),
+ l = n(13),
+ f = n(14),
+ d = n(16),
+ p = t.window,
+ h = Object.assign({ enabled: !0 }, f.preview),
+ g =
+ '<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="' +
+ l.image("spinner") +
+ '"/></div>\n <div id="pv-prev-area" class="hof"><img src="' +
+ l.image("preview-prev") +
+ '"/></div>\n <div id="pv-next-area" class="hof"><img src="' +
+ l.image("preview-next") +
+ '"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="' +
+ l.image("preview-close") +
+ '"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="' +
+ l.image("preview-raw") +
+ '"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="' +
+ l.image("preview-fullscreen") +
+ '"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="' +
+ l.image("preview-next") +
+ '"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="' +
+ l.image("preview-prev") +
+ '"/></li>\n </ul>\n </div>\n </div>',
+ m = "ext/preview",
+ v = d.get(m) || !1,
+ b = null,
+ w = !1,
+ y = null,
+ x = null,
+ k = function() {
+ var e = a("#pv-container"),
+ t = e[0],
+ n = e.children()[0];
+ if (t && n) {
+ var r = t.offsetWidth,
+ i = t.offsetHeight,
+ o = n.offsetWidth,
+ s = n.offsetHeight;
+ a(n).css({
+ left: 0.5 * (r - o) + "px",
+ top: 0.5 * (i - s) + "px",
+ });
+ }
+ },
+ _ = function() {
+ var e = p.document.documentElement,
+ t = e.clientWidth,
+ n = e.clientHeight,
+ r = v ? 0 : 20,
+ i = v ? 0 : 48;
+ a("#pv-container").css({
+ width: t - 2 * r + "px",
+ height: n - 2 * r - i + "px",
+ left: r + "px",
+ top: r + "px",
+ }),
+ a("#pv-spinner").css({
+ left: 0.5 * t + "px",
+ top: 0.5 * n + "px",
+ }),
+ v ?
+ (a("#pv-overlay").addCls("fullscreen"),
+ a("#pv-bar-fullscreen")
+ .find("img")
+ .attr("src", l.image("preview-no-fullscreen"))) :
+ (a("#pv-overlay").rmCls("fullscreen"),
+ a("#pv-bar-fullscreen")
+ .find("img")
+ .attr("src", l.image("preview-fullscreen"))),
+ k(),
+ o(x && x.adjust) && x.adjust();
+ },
+ C = function(e, t) {
+ a("#pv-bar-idx")
+ .text(e + "/" + t)
+ .show();
+ },
+ S = function(e) {
+ a("#pv-bar-raw").show().find("a").attr("href", e);
+ },
+ A = function(e) {
+ a("#pv-buttons .bar-left").rm(),
+ i(e, function(e) {
+ a("<li></li>")
+ .addCls("bar-left")
+ .addCls("bar-label")
+ .text(e)
+ .appTo("#pv-buttons");
+ });
+ },
+ T = function() {
+ var e = a("#pv-overlay .hof");
+ p.clearTimeout(b),
+ e.show(),
+ v &&
+ (b = p.setTimeout(function() {
+ return e.hide();
+ }, 2e3));
+ },
+ E = function() {
+ return x && x.moveIdx(1);
+ },
+ M = function() {
+ return x && x.moveIdx(-1);
+ },
+ D = function() {
+ (v = !v), d.put(m, v), T(), _();
+ },
+ P = function(e) {
+ e.stopPropagation(), e.preventDefault();
+ },
+ z = function(e) {
+ var t = e.keyCode;
+ 27 === t ?
+ (P(e), $()) :
+ 8 === t || 37 === t ?
+ (P(e), M()) :
+ 13 === t || 32 === t || 39 === t ?
+ (P(e), E()) :
+ 70 === t && (P(e), D());
+ },
+ L = function() {
+ A([]),
+ a("#pv-container").clr(),
+ a("#pv-overlay").show(),
+ a(p).on("keydown", z),
+ _();
+ },
+ $ = function() {
+ A([]),
+ a("#pv-container").clr(),
+ a("#pv-overlay").hide(),
+ a(p).off("keydown", z);
+ },
+ H = function e(t, n, r) {
+ p.clearTimeout(y);
+ var i = a("#pv-spinner");
+ if (!t) return (w = !1), void i.hide();
+ if (!w && r)
+ return void(y = p.setTimeout(function() {
+ return e(!0, n);
+ }, r));
+ var o = i.find(".back");
+ n ? o.attr("src", n).show() : o.hide(), (w = !0), i.show();
+ },
+ O = function e(t, n, r, i) {
+ var o = Object.assign(Object.create(e.prototype), {
+ items: t,
+ load: r,
+ adjust: i,
+ });
+ return o.setIdx(n), o;
+ };
+ O.prototype = {
+ setIdx: function(e) {
+ var t = this;
+ (this.idx = (e + this.items.length) % this.items.length),
+ (this.item = this.items[this.idx]),
+ C(this.idx + 1, this.items.length),
+ S(this.item.absHref),
+ A([this.item.label]);
+ var n = this.item;
+ Promise.resolve()
+ .then(function() {
+ i(a("#pv-container *"), function(e) {
+ "function" == typeof e.unload && e.unload();
+ }),
+ a("#pv-container").hide().clr(),
+ H(!0, n.thumbSquare || n.icon, 200);
+ })
+ .then(function() {
+ return t.load(n);
+ })
+ .then(function(e) {
+ n === t.item &&
+ (a("#pv-container").clr().app(e).show(), H(!1), _());
+ });
+ },
+ moveIdx: function(e) {
+ this.setIdx(this.idx + e);
+ },
+ };
+ var B = function(e, t, n) {
+ var r = function(r) {
+ r.$view &&
+ s(e, r.type) &&
+ r.$view.find("a").on("click", function(i) {
+ i.preventDefault();
+ var o = c(
+ a("#items .item").map(function(t) {
+ var n = t._item;
+ return s(e, n.type) ? n : null;
+ })
+ );
+ (x = O(o, o.indexOf(r), t, n)), L();
+ });
+ };
+ u.sub("view.changed", function(e) {
+ return i(e, r);
+ });
+ },
+ R = function() {
+ h.enabled &&
+ (a(g)
+ .hide()
+ .appTo("body")
+ .on("keydown", z)
+ .on("mousemove", T)
+ .on("mousedown", T)
+ .on("click", function(e) {
+ ("pv-overlay" !== e.target.id &&
+ "pv-container" !== e.target.id) ||
+ $();
+ })
+ .on("mousedown", P)
+ .on("mousemove", P)
+ .on("keydown", P)
+ .on("keypress", P),
+ a("#pv-spinner").hide(),
+ a("#pv-bar-prev, #pv-prev-area").on("click", M),
+ a("#pv-bar-next, #pv-next-area").on("click", E),
+ a("#pv-bar-close").on("click", $),
+ a("#pv-bar-fullscreen").on("click", D),
+ a(p).on("resize", _).on("load", _));
+ };
+ (e.exports = {
+ setLabels: A,
+ register: B,
+ get item() {
+ return x && x.item;
+ },
+ }),
+ R();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(19),
+ a = n(14),
+ s = n(38),
+ c = Object.assign({ enabled: !1, autoplay: !0, types: [] },
+ a["preview-aud"]
+ ),
+ u = '<audio id="pv-content-aud"/>',
+ l = function() {
+ var e = i("#pv-content-aud")[0];
+ e &&
+ s.setLabels([s.item.label, o.formatDate(1e3 * e.duration, "m:ss")]);
+ },
+ f = function(e) {
+ e.unload = function() {
+ (e.src = ""), e.load();
+ };
+ },
+ d = function(e) {
+ return new Promise(function(t) {
+ var n = i(u)
+ .on("loadedmetadata", function() {
+ return t(n);
+ })
+ .attr("controls", "controls");
+ c.autoplay && n.attr("autoplay", "autoplay"),
+ f(n[0]),
+ n.attr("src", e.absHref);
+ });
+ },
+ p = function() {
+ c.enabled && s.register(c.types, d, l);
+ };
+ p();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(8),
+ a = n(14),
+ s = n(38),
+ c = Object.assign({ enabled: !1, size: null, types: [] },
+ a["preview-img"]
+ ),
+ u = '<img id="pv-content-img"/>',
+ l = function() {
+ var e = i("#pv-content-img")[0];
+ if (e) {
+ var t = e.offsetWidth,
+ n = [s.item.label];
+ if (!c.size) {
+ var r = e.naturalWidth,
+ o = e.naturalHeight;
+ n.push(String(r) + "x" + String(o)),
+ n.push(String(((100 * t) / r).toFixed(0)) + "%");
+ }
+ s.setLabels(n);
+ }
+ },
+ f = function(e) {
+ return o
+ .request({
+ action: "get",
+ thumbs: [{ type: "img", href: e, width: c.size, height: 0 }],
+ })
+ .then(function(e) {
+ return e && e.thumbs && e.thumbs[0] ? e.thumbs[0] : null;
+ });
+ },
+ d = function(e) {
+ return Promise.resolve(e.absHref)
+ .then(function(e) {
+ return c.size ? f(e) : e;
+ })
+ .then(function(e) {
+ return new Promise(function(t) {
+ var n = i(u)
+ .on("load", function() {
+ return t(n);
+ })
+ .attr("src", e);
+ });
+ });
+ },
+ p = function() {
+ c.enabled && s.register(c.types, d, l);
+ };
+ p();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(42),
+ r = n(28),
+ i = n(2),
+ o = i.keys,
+ a = i.dom,
+ s = n(14),
+ c = n(38),
+ u = e.window,
+ l = u.XMLHttpRequest,
+ f = Object.assign({ enabled: !1, styles: {} }, s["preview-txt"]),
+ d = '<pre id="pv-content-txt"></pre>',
+ p = '<div id="pv-content-txt"></div>',
+ h = function() {
+ var e = a("#pv-content-txt")[0];
+ if (e) {
+ var t = a("#pv-container")[0];
+ (e.style.height = t.offsetHeight + "px"),
+ c.setLabels([c.item.label, c.item.size + " bytes"]);
+ }
+ },
+ g = function(e) {
+ return new Promise(function(t, n) {
+ var r = new l(),
+ i = function() {
+ if (r.readyState === l.DONE)
+ try {
+ t(r.responseText || "");
+ } catch (e) {
+ n(String(e));
+ }
+ };
+ r.open("GET", e, !0), (r.onreadystatechange = i), r.send();
+ });
+ },
+ m = function(e) {
+ return g(e.absHref)
+ .catch(function(e) {
+ return "[request failed] " + e;
+ })
+ .then(function(n) {
+ var i = f.styles[e.type];
+ if (1 === i) return a(d).text(n);
+ if (2 === i) return a(p).html(r(n));
+ if (3 === i) {
+ var o = a("<code></code>").text(n);
+ return (
+ u.setTimeout(
+ function() {
+ t.el(o[0]);
+ },
+ n.length < 2e4 ? 0 : 500
+ ),
+ a(d).app(o)
+ );
+ }
+ return a(p).text(n);
+ });
+ },
+ v = function() {
+ f.enabled && c.register(o(f.styles), m, h);
+ };
+ v();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ !(function(t, n) {
+ e.exports = n();
+ })(this, function() {
+ var e = ".lolight",
+ t = "ll-",
+ n = "_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}"
+ .replace(/_/g, "." + t)
+ .replace(/#/g, "{color:#"),
+ r = /^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,
+ i = "com",
+ o = "key",
+ a = "nam",
+ s = "num",
+ c = "pct",
+ u = "rex",
+ l = "spc",
+ f = "str",
+ d = "unk",
+ p = [
+ [s, /#([0-9a-f]{6}|[0-9a-f]{3})\b/],
+ [i, /(\/\/|#).*?(?=\n|$)/],
+ [i, /\/\*[\s\S]*?\*\//],
+ [i, /<!--[\s\S]*?-->/],
+ [u, /\/(\\\/|[^\n])*?\//],
+ [f, /(['"`])(\\\1|[\s\S])*?\1/],
+ [s, /[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?/],
+ [c, /[\\.,:;+\-*\/=<>()[\]{}|?!&@~]/],
+ [l, /\s+/],
+ [a, /[\w$]+/],
+ [d, /./],
+ ],
+ h = function(e) {
+ if ("string" != typeof e) throw new Error("tok: no string");
+ for (var t = [], n = p.length, i = !1; e;)
+ for (var c = 0; c < n; c += 1) {
+ var f = p[c][1].exec(e);
+ if (f && 0 === f.index) {
+ var d = p[c][0];
+ if (d !== u || !i) {
+ var h = f[0];
+ d === a && r.test(h) && (d = o),
+ d === l ?
+ h.indexOf("\n") >= 0 && (i = !1) :
+ (i = d === s || d === a),
+ (e = e.slice(h.length)),
+ t.push([d, h]);
+ break;
+ }
+ }
+ }
+ return t;
+ },
+ g = function(e, t) {
+ if ("undefined" != typeof document) t(document);
+ else if (e) throw new Error("no doc");
+ },
+ m = function(e) {
+ g(!0, function(n) {
+ var r = h(e.textContent);
+ (e.innerHTML = ""),
+ r.forEach(function(r) {
+ var i = n.createElement("span");
+ (i.className = t + r[0]),
+ (i.textContent = r[1]),
+ e.appendChild(i);
+ });
+ });
+ },
+ v = function(t) {
+ g(!0, function(n) {
+ [].forEach.call(n.querySelectorAll(t || e), function(e) {
+ m(e);
+ });
+ });
+ };
+ return (
+ g(!1, function(e) {
+ var t = e.querySelector("head"),
+ r = e.createElement("style");
+ (r.textContent = n),
+ t.insertBefore(r, t.firstChild),
+ /^(i|c|loade)/.test(e.readyState) ?
+ v() :
+ e.addEventListener("DOMContentLoaded", function() {
+ v();
+ });
+ }),
+ (v.tok = h),
+ (v.el = m),
+ v
+ );
+ });
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.dom,
+ o = n(14),
+ a = n(38),
+ s = Object.assign({ enabled: !1, autoplay: !0, types: [] },
+ o["preview-vid"]
+ ),
+ c = '<video id="pv-content-vid"/>',
+ u = function() {
+ var e = i("#pv-content-vid")[0];
+ if (e) {
+ var t = e.offsetWidth,
+ n = e.videoWidth,
+ r = e.videoHeight;
+ a.setLabels([
+ a.item.label,
+ String(n) + "x" + String(r),
+ String(((100 * t) / n).toFixed(0)) + "%",
+ ]);
+ }
+ },
+ l = function(e) {
+ e.unload = function() {
+ (e.src = ""), e.load();
+ };
+ },
+ f = function(e) {
+ return new Promise(function(t) {
+ var n = i(c)
+ .on("loadedmetadata", function() {
+ return t(n);
+ })
+ .attr("controls", "controls");
+ s.autoplay && n.attr("autoplay", "autoplay"),
+ l(n[0]),
+ n.attr("src", e.absHref);
+ });
+ },
+ d = function() {
+ s.enabled && a.register(s.types, f, u);
+ };
+ d();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.map,
+ o = r.debounce,
+ a = r.parsePattern,
+ s = r.dom,
+ c = n(8),
+ u = n(12),
+ l = n(20),
+ f = n(13),
+ d = n(14),
+ p = n(22),
+ h = n(18),
+ g = Object.assign({ enabled: !1, advanced: !1, debounceTime: 300, ignorecase: !0 },
+ d.search
+ ),
+ m =
+ '<div id="search" class="tool">\n <img src="' +
+ f.image("search") +
+ '" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',
+ v = !1,
+ b = "",
+ w = void 0,
+ y = void 0,
+ x = function() {
+ var e =
+ arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
+ if (e !== b) {
+ if (((b = e), !e)) return void h.setLocation();
+ w.addCls("pending"),
+ c
+ .request({
+ action: "get",
+ search: {
+ href: l.getAbsHref(),
+ pattern: e,
+ ignorecase: g.ignorecase,
+ },
+ })
+ .then(function(e) {
+ w.rmCls("pending"),
+ h.setHint("noMatch"),
+ h.setItems(
+ i(e.search, function(e) {
+ return p.get(e);
+ })
+ );
+ });
+ }
+ },
+ k = function() {
+ v
+ ?
+ (w.addCls("active"), y[0].focus(), x(a(y.val(), g.advanced))) :
+ (x(), w.rmCls("active"));
+ },
+ _ = function() {
+ (v = !v), k();
+ },
+ C = function() {
+ (v = !1), y.val(""), k();
+ },
+ S = function() {
+ g.enabled &&
+ ((w = s(m).appTo("#toolbar")),
+ (y = w.find("input")),
+ w.find("img").on("click", _),
+ y.on("keyup", o(k, g.debounceTime)),
+ u.sub("location.changed", C));
+ };
+ S();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.each,
+ i = t.dom,
+ o = n(12),
+ a = n(13),
+ s = n(14),
+ c = e.window.document,
+ u = Object.assign({ enabled: !1, clickndrag: !1, checkboxes: !1 },
+ s.select
+ ),
+ l =
+ '<span class="selector">\n <img src="' +
+ a.image("selected") +
+ '" alt="selected"/>\n </span>',
+ f = i(c),
+ d = i("html"),
+ p = i('<div id="selection-rect"></div>'),
+ h = Math.max,
+ g = Math.min,
+ m = Math.abs,
+ v = 0,
+ b = 0,
+ w = function() {
+ var e = i("#items .item.selected").map(function(e) {
+ return e._item;
+ });
+ o.pub("selection", e);
+ },
+ y = function(e) {
+ var t = i(e);
+ if (!t.length || t.isHidden()) return null;
+ var n = t[0].getBoundingClientRect();
+ return { l: n.left, t: n.top, r: n.right, b: n.bottom };
+ },
+ x = function(e, t) {
+ return (!!e &&
+ !!t &&
+ e.l === t.l &&
+ e.t === t.t &&
+ e.r === t.r &&
+ e.b === t.b
+ );
+ },
+ k = function(e) {
+ var t = e[0];
+ x(y(t), t && t._rect) ||
+ e.each(function(e) {
+ e._rect = y(e);
+ });
+ },
+ _ = function(e, t) {
+ if (!e || !t) return !1;
+ var n = h(e.l, t.l),
+ r = g(e.r, t.r),
+ i = h(e.t, t.t),
+ o = g(e.b, t.b);
+ return n <= r && i <= o;
+ },
+ C = function(e) {
+ var t = i("#content")[0],
+ n = y(t),
+ r = e.pageX - n.l + t.scrollLeft,
+ o = e.pageY - n.t + t.scrollTop;
+ return { x: r, y: o };
+ },
+ S = function(e) {
+ var t = C(e),
+ n = t.x,
+ r = t.y,
+ o = g(v, n),
+ a = g(b, r),
+ s = m(v - n),
+ c = m(b - r),
+ u = e.ctrlKey || e.metaKey;
+ if (!(!u && s < 4 && c < 4)) {
+ u || i("#items .item").rmCls("selected"),
+ d.addCls("drag-select"),
+ p
+ .show()
+ .css({
+ left: o + "px",
+ top: a + "px",
+ width: s + "px",
+ height: c + "px",
+ });
+ var l = y(p),
+ f = i("#items .item:not(.folder-parent)");
+ k(f),
+ f.rmCls("selecting").each(function(e) {
+ _(l, e._rect) && i(e).addCls("selecting");
+ });
+ }
+ },
+ A = function e(t) {
+ f.off("mousemove", S).off("mouseup", e),
+ S(t),
+ i("#items .item.selecting.selected")
+ .rmCls("selecting")
+ .rmCls("selected"),
+ i("#items .item.selecting").rmCls("selecting").addCls("selected"),
+ w(),
+ d.rmCls("drag-select"),
+ p.hide(),
+ t.stopPropagation(),
+ t.preventDefault();
+ },
+ T = function(e) {
+ if (!(
+ 0 !== e.button || e.offsetX >= i("#content")[0].offsetWidth - 16
+ )) {
+ var t = C(e),
+ n = t.x,
+ r = t.y;
+ (v = n),
+ (b = r),
+ f.on("mousemove", S).on("mouseup", A),
+ S(e),
+ e.preventDefault();
+ }
+ },
+ E = function(e) {
+ for (; !e._item && e.parentNode;) e = e.parentNode;
+ return e._item;
+ },
+ M = function(e) {
+ E(e.target).$view.tglCls("selected"),
+ w(),
+ e.stopPropagation(),
+ e.preventDefault();
+ },
+ D = function(e) {
+ e.$view &&
+ !e.isCurrentParentFolder() &&
+ i(l).on("click", M).appTo(e.$view.find("a"));
+ },
+ P = function(e, t) {
+ u.checkboxes && r(e, D),
+ r(t, function(e) {
+ e.$view && e.$view.rmCls("selected");
+ }),
+ w();
+ },
+ z = function() {
+ u.enabled &&
+ (u.clickndrag || u.checkboxes) &&
+ (o.sub("view.changed", P),
+ u.clickndrag &&
+ (p.hide().appTo("#content"),
+ i("#content")
+ .on("mousedown", T)
+ .on("drag", function(e) {
+ return e.preventDefault();
+ })
+ .on("dragstart", function(e) {
+ return e.preventDefault();
+ })));
+ };
+ z();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.toArray,
+ a = r.dom,
+ s = r.cmp,
+ c = r.naturalCmp,
+ u = n(12),
+ l = n(13),
+ f = n(14),
+ d = n(16),
+ p = Object.assign({
+ enabled: !1,
+ column: 0,
+ reverse: !1,
+ ignorecase: !0,
+ natural: !1,
+ folders: 0,
+ },
+ f.sort
+ ),
+ h = "ext/sort",
+ g =
+ '<img src="' + l.image("sort") + '" class="sort" alt="sort order"/>',
+ m = function(e) {
+ return e.isFolder() ? p.folders : 1;
+ },
+ v = { 0: "label", 1: "time", 2: "size" },
+ b = { 0: "label", 1: "date", 2: "size" },
+ w = function(e, t, n, r) {
+ return function(i, o) {
+ var a = i._item,
+ u = o._item,
+ l = m(a) - m(u);
+ if (0 !== l) return l;
+ var f = a[e],
+ d = u[e];
+ return (
+ (isNaN(f) || isNaN(d)) &&
+ ((f = String(f)),
+ (d = String(d)),
+ n && ((f = f.toLowerCase()), (d = d.toLowerCase()))),
+ (l = r ? c(f, d) : s(f, d)),
+ t ? -l : l
+ );
+ };
+ },
+ y = function(e, t) {
+ var n = a("#items li.header a"),
+ r = a("#items li.header a." + b[e]),
+ i = w(v[e], t, p.ignorecase, p.natural);
+ d.put(h, { column: e, reverse: t }),
+ n.rmCls("ascending").rmCls("descending"),
+ r.addCls(t ? "descending" : "ascending"),
+ a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items");
+ },
+ x = function() {
+ var e = d.get(h),
+ t = (e && e.column) || p.column,
+ n = (e && e.reverse) || p.reverse;
+ y(t, n);
+ },
+ k = function() {
+ var e = a("#items li.header");
+ i(b, function(t, n) {
+ var r = "0" === n ? "app" : "pre";
+ e.find("a." + t)[r](g)
+ .on("click", function(e) {
+ y(n, a(e.currentTarget).hasCls("ascending")),
+ e.preventDefault();
+ });
+ });
+ },
+ _ = function() {
+ p.enabled && (k(), u.sub("view.changed", x));
+ };
+ _();
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.map,
+ a = r.includes,
+ s = n(8),
+ c = n(12),
+ u = n(14),
+ l = Object.assign({
+ enabled: !1,
+ img: ["img-bmp", "img-gif", "img-ico", "img-jpg", "img-png"],
+ mov: [
+ "vid-avi",
+ "vid-flv",
+ "vid-mkv",
+ "vid-mov",
+ "vid-mp4",
+ "vid-mpg",
+ "vid-webm",
+ ],
+ doc: ["x-pdf", "x-ps"],
+ delay: 1,
+ size: 100,
+ exif: !1,
+ chunksize: 20,
+ },
+ u.thumbnails
+ ),
+ f = 4 / 3,
+ d = function(e, t) {
+ var n = null;
+ if (a(l.img, t.type)) n = "img";
+ else if (a(l.mov, t.type)) n = "mov";
+ else {
+ if (!a(l.doc, t.type)) return;
+ n = "doc";
+ }
+ t.thumbSquare ?
+ t.$view
+ .find(".icon.square img")
+ .addCls("thumb")
+ .attr("src", t.thumbSquare) :
+ e.push({
+ type: n,
+ href: t.absHref,
+ ratio: 1,
+ callback: function(e) {
+ e &&
+ t.$view &&
+ ((t.thumbSquare = e),
+ t.$view
+ .find(".icon.square img")
+ .addCls("thumb")
+ .attr("src", e));
+ },
+ }),
+ t.thumbRational ?
+ t.$view
+ .find(".icon.landscape img")
+ .addCls("thumb")
+ .attr("src", t.thumbRational) :
+ e.push({
+ type: n,
+ href: t.absHref,
+ ratio: f,
+ callback: function(e) {
+ e &&
+ t.$view &&
+ ((t.thumbRational = e),
+ t.$view
+ .find(".icon.landscape img")
+ .addCls("thumb")
+ .attr("src", e));
+ },
+ });
+ },
+ p = function(e) {
+ var t = o(e, function(e) {
+ return {
+ type: e.type,
+ href: e.href,
+ width: Math.round(l.size * e.ratio),
+ height: l.size,
+ };
+ });
+ return s.request({ action: "get", thumbs: t }).then(function(t) {
+ i(e, function(e, n) {
+ e.callback(t && t.thumbs ? t.thumbs[n] : null);
+ });
+ });
+ },
+ h = function(e) {
+ for (
+ var t = e.length,
+ n = l.chunksize,
+ r = Promise.resolve(),
+ i = function(t) {
+ r = r.then(function() {
+ return p(e.slice(t, t + n));
+ });
+ },
+ o = 0; o < t; o += n
+ )
+ i(o);
+ },
+ g = function(e) {
+ var t = [];
+ i(e, function(e) {
+ return d(t, e);
+ }),
+ h(t);
+ },
+ m = function(e) {
+ setTimeout(function() {
+ return g(e);
+ }, l.delay);
+ },
+ v = function() {
+ l.enabled && c.sub("view.changed", m);
+ };
+ v();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(12),
+ r = n(14),
+ i = e.window.document,
+ o = Object.assign({ enabled: !1 }, r.title),
+ a = function(e) {
+ var t = e.getCrumb().map(function(e) {
+ return e.label;
+ }),
+ n = t.join(" > ");
+ t.length > 1 && (n = t[t.length - 1] + " - " + n), (i.title = n);
+ },
+ s = function() {
+ o.enabled && t.sub("location.changed", a);
+ };
+ s();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+ function(e, t, n) {
+ "use strict";
+ var r = n(2),
+ i = r.each,
+ o = r.dom,
+ a = r.cmp,
+ s = r.naturalCmp,
+ c = n(12),
+ u = n(20),
+ l = n(13),
+ f = n(14),
+ d = n(16),
+ p = Object.assign({
+ enabled: !1,
+ show: !0,
+ maxSubfolders: 50,
+ naturalSort: !1,
+ ignorecase: !0,
+ },
+ f.tree
+ ),
+ h =
+ '<div class="item folder">\n <span class="indicator">\n <img src="' +
+ l.image("tree-indicator") +
+ '"/>\n </span>\n <a>\n <span class="icon"><img src="' +
+ l.icon("folder") +
+ '"/></span>\n <span class="label"></span>\n </a>\n </span>',
+ g =
+ '<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="' +
+ l.image("tree-toggle") +
+ '" alt="view-tree"/>\n </div>\n </div>',
+ m = "ext/tree",
+ v = function(e) {
+ for (; !e._item && e.parentNode;) e = e.parentNode;
+ return e._item;
+ },
+ b = function(e) {
+ var t = v(e.target);
+ "unknown" === t._treeState ?
+ t.fetchContent().then(function() {
+ (t._treeState = "open"), y(t);
+ }) :
+ "open" === t._treeState ?
+ ((t._treeState = "closed"),
+ t._$tree.rmCls("open").addCls("closed")) :
+ "closed" === t._treeState &&
+ ((t._treeState = "open"),
+ t._$tree.rmCls("closed").addCls("open"));
+ },
+ w = function(e, t) {
+ var n = e.label,
+ r = t.label;
+ return (
+ p.ignorecase && ((n = n.toLowerCase()), (r = r.toLowerCase())),
+ p.naturalSort ? s(n, r) : a(n, r)
+ );
+ },
+ y = function e(t) {
+ var n = t.getSubfolders(),
+ r = n.length,
+ a = p.maxSubfolders,
+ s = o(h);
+ if (
+ (s.find(".indicator").on("click", b),
+ s.find(".label").text(t.label),
+ u.setLink(s.find("a"), t),
+ t.isCurrentFolder() && s.addCls("active"),
+ t.isManaged ||
+ s.find(".icon img").attr("src", l.icon("folder-page")),
+ (t._treeState = t._treeState || "none"),
+ t.isManaged && !t.isContentFetched ?
+ (t._treeState = "unknown") :
+ r || (t._treeState = "none"),
+ s.addCls(t._treeState),
+ r)
+ ) {
+ var c = o('<div class="content"></div>').appTo(s);
+ n.sort(w),
+ i(n.slice(0, a), function(t) {
+ return c.app(e(t));
+ }),
+ r > a &&
+ c.app(
+ '<div class="summary">… ' + (r - a) + " more subfolders</div>"
+ );
+ }
+ return (
+ t._$tree && t._$tree.rpl(s), (t._$tree = s), (s[0]._item = t), s
+ );
+ },
+ x = function e(t) {
+ return (
+ (t._treeState = "open"),
+ t.fetchContent().then(function() {
+ return t.parent ? e(t.parent) : t;
+ })
+ );
+ },
+ k = function() {
+ d.get(m) ?
+ (o("#view-tree").addCls("active"), o("#tree").show()) :
+ (o("#view-tree").rmCls("active"), o("#tree").hide());
+ },
+ _ = function(e) {
+ x(e).then(function(e) {
+ o("#tree").clr().app(y(e)), k();
+ });
+ },
+ C = function() {
+ p.enabled &&
+ (o('<div id="tree"></div>').hide().appTo("#mainrow"),
+ o(g)
+ .appTo("#sidebar")
+ .find("#view-tree")
+ .on("click", function(e) {
+ d.put(m, !d.get(m)), k(), c.pub("resize"), e.preventDefault();
+ }),
+ "boolean" != typeof d.get(m) && d.put(m, p.show),
+ k(),
+ c.sub("location.changed", _));
+ };
+ C();
+ },
+ function(e, t, n) {
+ (function(e) {
+ "use strict";
+ var t = n(2),
+ r = t.dom,
+ i = n(7),
+ o = n(8),
+ a = n(13),
+ s = '<ul id="tests"></ul>',
+ c =
+ '<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',
+ u =
+ '<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in \'_h5ai/private/conf/options.json\'.\n </div>\n </div>',
+ l =
+ '<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="' +
+ a.image("paypal") +
+ '" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',
+ f = i.setup,
+ d = function(e, t, n, i) {
+ var o = r(c).appTo("#tests");
+ o.find(".label").text(e),
+ o
+ .find(".result")
+ .addCls(n ? "passed" : "failed")
+ .text(i ? i : n ? "yes" : "no"),
+ o.find(".info").html(t);
+ },
+ p = function() {
+ f.AS_ADMIN &&
+ (r(s).appTo("#content"),
+ d(
+ "h5ai version",
+ "Only green if this is an official h5ai release",
+ /^\d+\.\d+\.\d+$/.test(f.VERSION),
+ f.VERSION
+ ),
+ d(
+ "Index file found",
+ "Add <code>" + f.INDEX_HREF + "</code> to your index file list",
+ f.INDEX_HREF
+ ),
+ d(
+ "Options parsable",
+ "File <code>options.json</code> is readable and syntax is correct",
+ null !== i.options
+ ),
+ d(
+ "Types parsable",
+ "File <code>types.json</code> is readable and syntax is correct",
+ null !== i.types
+ ),
+ d(
+ "Server software",
+ "Server is one of apache, lighttpd, nginx or cherokee",
+ f.HAS_SERVER,
+ f.SERVER_NAME + " " + f.SERVER_VERSION
+ ),
+ d(
+ "PHP version",
+ "PHP version >= " + f.MIN_PHP_VERSION, !0,
+ f.PHP_VERSION
+ ),
+ d(
+ "PHP arch",
+ "64-bit required to correctly display file/folder sizes > ~2GB",
+ "64-bit" === f.PHP_ARCH,
+ f.PHP_ARCH
+ ),
+ d(
+ "Public Cache directory",
+ "Web server has write access",
+ f.HAS_WRITABLE_CACHE_PUB
+ ),
+ d(
+ "Private Cache directory",
+ "Web server has write access",
+ f.HAS_WRITABLE_CACHE_PRV
+ ),
+ d(
+ "Image thumbs",
+ "PHP GD extension with JPEG support available",
+ f.HAS_PHP_JPEG
+ ),
+ d(
+ "Use EXIF thumbs",
+ "PHP EXIF extension available",
+ f.HAS_PHP_EXIF
+ ),
+ d(
+ "Movie thumbs",
+ "Command line program <code>avconv</code> or <code>ffmpeg</code> available",
+ f.HAS_CMD_AVCONV || f.HAS_CMD_FFMPEG
+ ),
+ d(
+ "PDF thumbs",
+ "Command line program <code>convert</code> or <code>gm</code> available",
+ f.HAS_CMD_CONVERT || f.HAS_CMD_GM
+ ),
+ d(
+ "Shell tar",
+ "Command line program <code>tar</code> available",
+ f.HAS_CMD_TAR
+ ),
+ d(
+ "Shell zip",
+ "Command line program <code>zip</code> available",
+ f.HAS_CMD_ZIP
+ ),
+ d(
+ "Shell du",
+ "Command line program <code>du</code> available",
+ f.HAS_CMD_DU
+ ));
+ },
+ h = function() {
+ e.window.location.reload();
+ },
+ g = function() {
+ o.request({ action: "login", pass: r("#pass").val() }).then(h);
+ },
+ m = function() {
+ o.request({ action: "logout" }).then(h);
+ },
+ v = function(e) {
+ 13 === e.which && g();
+ },
+ b = function() {
+ r(l).appTo("#content");
+ },
+ w = function() {
+ r(u).appTo("#content"),
+ f.AS_ADMIN ?
+ (r("#pass").rm(),
+ r("#login").rm(),
+ r("#logout").on("click", m)) :
+ (r("#pass").on("keydown", v)[0].focus(),
+ r("#login").on("click", g),
+ r("#logout").rm()),
+ i.options.hasCustomPasshash && r("#hint").rm();
+ },
+ y = function() {
+ b(), w(), p();
+ };
+ y();
+ }.call(
+ t,
+ (function() {
+ return this;
+ })()
+ ));
+ },
+]);
\ No newline at end of file
--
2.23.0
2
3
We need to create the access_key in the dir which we want to upload
file, it is hard to handle that.
So we save the upload_dirs in redis, then we can set the field in
scheduler, the result-webdav container will read the value by job id and check the upload dir.
Signed-off-by: Cao Xueliang <caoxl78320(a)163.com>
---
src/lib/job.cr | 23 ++++++++++++++---------
src/scheduler/close_job.cr | 6 ------
src/scheduler/find_job_boot.cr | 10 +++++-----
3 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/src/lib/job.cr b/src/lib/job.cr
index 0083a7d..083a233 100644
--- a/src/lib/job.cr
+++ b/src/lib/job.cr
@@ -88,8 +88,7 @@ class Job
pp_params
submit_date
result_root
- access_key
- access_key_file
+ upload_dirs
lkp_initrd_user
user_lkp_src
kernel_uri
@@ -243,15 +242,21 @@ class Job
def set_result_root
update_tbox_group_from_testbox # id must exists, need update tbox_group
self["result_root"] = File.join("/result/#{suite}/#{submit_date}/#{tbox_group}/#{rootfs}", "#{pp_params}", "#{id}")
-
- # access_key has information based on "result_root"
- # so when set result_root, we need redo set_ to update it
- set_access_key()
+ set_upload_dirs()
end
- private def set_access_key
- self["access_key"] = "#{Random::Secure.hex(10)}-#{id}"
- self["access_key_file"] = File.join("/srv/", "#{result_root}", ".#{access_key}")
+ def set_upload_dirs
+ if @hash["cci-makepkg"]?
+ package_dir = ",/initrd/pkg"
+ elsif @hash["cci-depends"]?
+ package_dir = ",/initrd/deps"
+ elsif @hash["build-pkg"]?
+ package_dir = ",/initrd/build-pkg"
+ else
+ package_dir = ""
+ end
+
+ self["upload_dirs"] = "#{result_root}#{package_dir}"
end
private def set_result_service
diff --git a/src/scheduler/close_job.cr b/src/scheduler/close_job.cr
index 579c2c0..d8f80d7 100644
--- a/src/scheduler/close_job.cr
+++ b/src/scheduler/close_job.cr
@@ -8,8 +8,6 @@ class Sched
job = @redis.get_job(job_id)
- delete_access_key_file(job) if job
-
response = @es.set_job_content(job)
if response["_id"] == nil
# es update fail, raise exception
@@ -27,8 +25,4 @@ class Sched
@log.info(%({"job_id": "#{job_id}", "job_state": "complete"}))
end
-
- def delete_access_key_file(job : Job)
- File.delete(job.access_key_file) if File.exists?(job.access_key_file)
- end
end
diff --git a/src/scheduler/find_job_boot.cr b/src/scheduler/find_job_boot.cr
index 5a11523..6623a5e 100644
--- a/src/scheduler/find_job_boot.cr
+++ b/src/scheduler/find_job_boot.cr
@@ -141,10 +141,6 @@ class Sched
return response
end
- def touch_access_key_file(job : Job)
- FileUtils.touch(job.access_key_file)
- end
-
private def get_boot_ipxe(job : Job)
response = "#!ipxe\n\n"
response += Array(String).from_json(job.initrds_uri).join("\n") + "\n"
@@ -155,8 +151,12 @@ class Sched
return response
end
+ def set_id2upload_dirs(job)
+ @redis.hash_set("sched/id2upload_dirs", job.id, job.upload_dirs)
+ end
+
def boot_content(job : Job | Nil, boot_type : String)
- touch_access_key_file(job) if job
+ set_id2upload_dirs(job) if job
case boot_type
when "ipxe"
--
2.23.0
1
0